从 Azure Databricks 读取 Azure Datalake Gen2 映像

Posted

技术标签:

【中文标题】从 Azure Databricks 读取 Azure Datalake Gen2 映像【英文标题】:Read Azure Datalake Gen2 images from Azure Databricks 【发布时间】:2020-05-08 02:53:45 【问题描述】:

我正在处理存储在 Azure Data Lake Gen2 中的 .tif 文件。想要使用 Azure Databricks 中的 rasterio 打开此文件。

例子:

当从 Data Lake 读取图像文件时,spark.read.format("image").load(filepath) 工作正常。

但尝试打开与

with rasterio.open(filepath) as src:
    print(src.profile)

出现错误:

RasterioIOError: wasbs://xxxxx.blob.core.windows.net/xxxx_2016/xxxx_2016.tif: No such file or directory

任何线索做错了什么?

更新:

按照 Axel R 的建议,在 Databricks 文件系统上挂载文件,但仍然遇到同样的问题,无法从 rasterio 打开文件,但可以读取为 df。

还尝试通过在 Datalake 中创建文件的共享访问签名并尝试通过 URI 访问文件。现在得到错误以下错误:

CURL error: error setting certificate verify locations:   CAfile: /etc/pki/tls/certs/ca-bundle.crt   CApath: none

为了进一步测试,尝试从网络打开一个相同的文件,即@

filepath = 'http://landsat-pds.s3.amazonaws.com/c1/L8/042/034/LC08_L1TP_042034_20170616_20170629_01_T1/LC08_L1TP_042034_20170616_20170629_01_T1_B4.TIF' 工作正常

【问题讨论】:

【参考方案1】:

我相信这是因为 rasterio 使用的是本地 API,并且只能从以 /dbfs/ 开头的路径读取。

您可以挂载 blob 存储吗?这将允许您使用以 /dbfs/mnt/ 开头的路径的 rasterio 访问它

【讨论】:

我同意这个答案。这也表明将在驱动程序上运行的阻塞操作只会让工作人员处于空闲状态。通常是您想要避免的事情。 挂载到数据块后,读取文件为 'dbfs:/mnt/Firescar/cvmsre_201910_afka2.tif' 时更改为 '/dbfs/mnt/Firescar/cvmsre_201910_afka2.tif' 一切正常

以上是关于从 Azure Databricks 读取 Azure Datalake Gen2 映像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure Databricks 中使用 JDBC 从 PostgreSQL 读取表数据?

使用 Azure databricks /Synapse notebooks 中的 Json.load 从 Azure datalake 读取 Json 文件作为文件

Azure Databricks Spark XML 库 - 尝试读取 xml 文件

使用 azure databricks 读取 azure databricks 日志 json 文件

从 Azure Databricks 将数据写入 Azure Blob 存储

使用 Azure EventHubs Capture 生成的 Azure Data Lake Gen1 中的 Databricks 读取 avro 数据失败