PySpark для блоков данных: чтение файла CSV, скопированного из хранилища BLOB-объектов Azure, приводит к исключению java.io.FileNotFoundException

Я использую Azure Databricks 4.3 (включает Apache Spark 2.3.1, Scala 2.11).

Я скопировал CSV файл из хранилища BLOB-объектов Azure в кластер Databricks с помощью dbutils.fs.cp на диск, добавив file: в абсолют local_path:

copy_to = "file:" + local_path
dbutils.fs.cp(blob_storage_path, copy_to)

Когда я тогда пытаюсь прочитать файл, используя тот же путь с file: добавлено впереди:

csv_spark_df = sqlContext.read.format('csv').options(header='true', inferSchema='true').load(copy_to)

Я получаю сообщение об ошибке, указывающее, что данный путь не существует:

java.io.FileNotFoundException: File file:/<local_path>

Когда я монтирую контейнер хранилища BLOB-объектов Azure, как описано ниже, я могу правильно прочитать файл с помощью Spark, используя тот же фрагмент, что и выше, используя абсолютный local_path файла в смонтированном каталоге:

https://docs.databricks.com/spark/latest/data-sources/azure/azure-storage.html

Можно ли вообще прочитать CSV файл, который был скопирован из хранилища BLOB-объектов Azure, или решение, использующее монтирование контейнера хранилища BLOB-объектов Azure, в любом случае предпочтительнее?

1 ответ

Решение

Я не уверен, что файл: сопоставится с.

Я бы ожидал, что путь будет путь DBFS:

copy_to = "/path/file.csv"

Предполагается, что это путь к DBFS.

Вы всегда можете сделать:

dbutils.fs.ls("/path")

Для проверки копии файла.

Хотя, пожалуйста, обратите внимание, что вам не нужно копировать файл в DBFS для загрузки в фрейм данных - вы можете читать прямо из учетной записи хранилища BLOB-объектов. Это был бы нормальный подход. Есть ли причина, по которой вы хотите скопировать его локально?

Другие вопросы по тегам