【问题标题】:PySpark on Databricks: Reading a CSV file copied from the Azure Blob Storage results in java.io.FileNotFoundExceptionDatabricks 上的 PySpark:读取从 Azure Blob 存储复制的 CSV 文件会导致 java.io.FileNotFoundException
【发布时间】:2019-01-28 15:59:07
【问题描述】:

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

我通过将file: 添加到绝对local_path 中,使用dbutils.fs.cpCSV 文件从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 存储容器时,如下所述,然后我可以使用上面相同的 sn-p 使用 Spark 正确读取文件,使用安装目录中文件的绝对 local_path

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

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

【问题讨论】:

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


    【解决方案1】:

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

    我希望该路径是 DBFS 路径:

    copy_to = "/path/file.csv"
    

    这将被假定为一个 DBFS 路径。

    你总是可以这样做的:

    dbutils.fs.ls("/path")
    

    验证文件副本。

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

    【讨论】:

    • 我也在处理二进制文件,我必须先复制到 Databricks 才能解析它们。对于 CSV 文件,我认为这不是首选方式,但我很好奇为什么它不起作用。会不会是因为我在 copy_to 路径中添加了file:
    • 我相信是的。如果您像我的示例一样从根目录开始,我怀疑它会很好。
    猜你喜欢
    • 2022-01-19
    • 2018-11-04
    • 1970-01-01
    • 2012-06-16
    • 2019-06-28
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多