Azure Databricks 在 Blob 存储上打开文件时出现问题

Posted

技术标签:

【中文标题】Azure Databricks 在 Blob 存储上打开文件时出现问题【英文标题】:Problems with Azure Databricks opening a file on the Blob Storage 【发布时间】:2018-10-15 17:27:12 【问题描述】:

使用 Azure Databricks,我可以列出 blob 存储中的文件,将它们放入数组中。 但是当我尝试打开一个文件时,我遇到了一个错误。可能是因为特殊的语法。

storage_account_name = "tesb"
storage_container_name = "rttracking-in"
storage_account_access_key = "xyz"
file_location = "wasbs://rttracking-in"
file_type = "xml"

spark.conf.set(
  "fs.azure.account.key."+storage_account_name+".blob.core.windows.net",
  storage_account_access_key)

xmlfiles = dbutils.fs.ls("wasbs://"+storage_container_name+"@"+storage_account_name+".blob.core.windows.net/")

import pandas as pd
import xml.etree.ElementTree as ET
import re
import os

firstfile = xmlfiles[0].path
root = ET.parse(firstfile).getroot()

错误是

IOError: [Errno 2] 没有这样的文件或目录:u'wasbs://rttracking-in@tstoweuyptoesb.blob.core.windows.net/rtTracking_00001.xml'

【问题讨论】:

【参考方案1】:

我的猜测是ET.parse() 不知道您已在其中设置与存储帐户的连接的 Spark 上下文。或者,您可以尝试安装存储。然后您可以通过本地路径访问文件,就像文件是本地文件一样。

请看这里:https://docs.databricks.com/spark/latest/data-sources/azure/azure-storage.html#mount-an-azure-blob-storage-container

这应该可以工作:

root = ET.parse("/mnt/<mount-name>/...")

【讨论】:

你确实把我引向了正确的方向,但最终的解决方案甚至有点疯狂......【参考方案2】:

我确实安装了存储,然后就可以了

firstfile = xmlfiles[0].path.replace('dbfs:',​​'/dbfs') root = ET.parse(firstfile).getroot()

【讨论】:

以上是关于Azure Databricks 在 Blob 存储上打开文件时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 /mnt/ 将数据从 Azure Blob 存储读取到 Azure Databricks

Azure Data PlatformETL工具(21)——Azure Databricks使用——访问Azure Blob

Azure Data PlatformETL工具(21)——Azure Databricks使用——访问Azure Blob

如何使用 SAS 读取 Azure databricks 中的 blob

将 DataBricks 连接到 Azure Blob 存储

Azure Databricks 在 Blob 存储上打开文件时出现问题