Databricks上的PySpark:读取从Azure Blob存储复制的CSV文件会导致java.io.FileNotFoundException

时间:2019-01-28 15:59:07

标签: azure pyspark azure-blob-storage spark-csv azure-databricks

我正在运行Azure Databricks 4.3(包括Apache Spark 2.3.1,Scala 2.11)。

通过将CSV添加到绝对dbutils.fs.cp到磁盘,我使用file:local_path文件从Azure Blob存储复制到Databricks群集:

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>

如下所述,当我安装Azure Blob存储容器时,我可以使用上面相同的代码段,使用已安装目录中文件的绝对local_path来使用Spark正确读取文件:

https://docs.databricks.com/spark/latest/data-sources/azure/azure-storage.html#mount-azure-blob-storage-containers-with-dbfs

是否完全可以读取从Azure Blob存储复制的CSV文件,还是使用Azure Blob存储容器安装的解决方案仍然是首选?

1 个答案:

答案 0 :(得分:1)

我不确定文件将映射到什么。

我希望该路径是DBFS路径:

copy_to = "/path/file.csv"

这将假定为DBFS路径。

您可以随时这样做:

dbutils.fs.ls("/path")

要验证文件副本。

尽管请注意,您不需要将文件复制到DBFS即可加载到数据帧中-您可以直接从Blob存储帐户读取。那是正常的做法。您是否有理由要在本地复制它?