Хранилище файлов Databricks = 0

Я только что запустил это:

dbutils.fs.ls("dbfs:/FileStore/")

Я вижу такой результат:

[FileInfo(path='dbfs:/FileStore/import-stage/', name='import-stage/', size=0),
 FileInfo(path='dbfs:/FileStore/jars/', name='jars/', size=0),
 FileInfo(path='dbfs:/FileStore/job-jars/', name='job-jars/', size=0),
 FileInfo(path='dbfs:/FileStore/plots/', name='plots/', size=0),
 FileInfo(path='dbfs:/FileStore/tables/', name='tables/', size=0)]

Разве в файловом магазине не должно быть чего-нибудь? У меня в озере сотни ГБ данных. У меня возникают всевозможные проблемы с получением Databricks для поиска этих файлов. Когда я использую фабрику данных Azure, все работает отлично. Это начинает сводить меня с ума!

Например, когда я запускаю это:

dbutils.fs.ls("/mnt/rawdata/2019/06/28/parent/")

Я получаю это сообщение:

java.io.FileNotFoundException: File/6199764716474501/mnt/rawdata/2019/06/28/parent does not exist.

У меня в озере десятки тысяч файлов! Я не могу понять, почему я не могу получить список этих файлов !!


person ASH    schedule 04.10.2019    source источник


Ответы (1)


В Azure Databricks это ожидаемое поведение.

  • Для файлов отображается фактический размер файла.
  • Для каталогов отображается размер = 0.

Пример: В dbfs: / FileStore / у меня есть три файла, показанные белым цветом, и три папки, показанные синим цветом. Проверка размера файла с помощью databricks cli.

dbfs ls -l dbfs:/FileStore/

введите описание изображения здесь

Когда вы проверяете результат с помощью dbutils следующим образом:

dbutils.fs.ls("dbfs:/FileStore/")

введите описание изображения здесь

Важный момент, который следует помнить при чтении файлов размером более 2 ГБ:

  • Поддерживаются только файлы размером менее 2 ГБ. Если вы используете API-интерфейсы ввода-вывода локальных файлов для чтения или записи файлов размером более 2 ГБ, вы можете увидеть поврежденные файлы. Вместо этого обращайтесь к файлам размером более 2 ГБ с помощью интерфейса командной строки DBFS, dbutils.fs или Spark API или используйте папку / dbfs / ml, описанную в API локальных файлов для глубокого обучения.
  • Если вы пишете файл с помощью API-интерфейсов ввода-вывода локальных файлов, а затем сразу же пытаетесь получить к нему доступ с помощью DBFS CLI, dbutils.fs или API-интерфейсов Spark, вы можете столкнуться с FileNotFoundException, файлом размера 0 или устаревшим содержимое файла. Это ожидается, потому что операционная система по умолчанию кэширует записи. Чтобы принудительно сбросить эти записи в постоянное хранилище (в нашем случае DBFS), используйте стандартную синхронизацию системных вызовов Unix.

Есть несколько способов решить эту проблему. Вы можете оформить заказ на аналогичный SO ветка, на которую я ответил.

Надеюсь это поможет.

person CHEEKATLAPRADEEP-MSFT    schedule 30.10.2019