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-объектов. Это был бы нормальный подход. Есть ли причина, по которой вы хотите скопировать его локально?