当前位置: 首页 > 知识库问答 >
问题:

使用Azure Database ricks从ADLS访问数据

宋朝
2023-03-14

我正在尝试使用存储帐户访问密钥通过Azure Databricks访问存储在ADLS位置的数据文件。为了访问数据文件,我在azure databricks中使用python notebook,下面的命令工作正常,

spark.conf.set(
  "fs.azure.account.key.<storage-account-name>.dfs.core.windows.net",
  "<access-key>"
)

但是,当我尝试使用下面的命令列出目录时,它会抛出错误

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net")

错误:

ExecutionError: An error occurred while calling z:com.databricks.backend.daemon.dbutils.FSUtils.ls.
: Operation failed: "This request is not authorized to perform this operation using this permission.", 403, GET, https://<storage-account-name>.dfs.core.windows.net/<container-name>?upn=false&resource=filesystem&maxResults=500&timeout=90&recursive=false, AuthorizationPermissionMismatch, "This request is not authorized to perform this operation using this permission. RequestId:<request-id> Time:2021-08-03T08:53:28.0215432Z"

我不确定它需要什么权限,我该如何继续。

此外,我正在使用ADLS Gen2和Azure Database ricks(试用版-高级版)。

提前感谢!

共有3个答案

姜俊逸
2023-03-14

您可以通过Database ricks使用访问密钥挂载ADLS存储帐户,然后读取/写入数据。请尝试以下代码:

dbutils.fs.mount(
  source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
  mount_point = "/mnt/<mount-name>",
  extra_configs = {"fs.azure.account.key.<storage-account-name>.blob.core.windows.net":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})

dbutils.fs.ls("/mnt/<mount-name>")
秦宜修
2023-03-14

试试这个。

spark.conf.set("fs.azure.account.key.<your-storage-account-name>.blob.core.windows.net","<your-storage-account-access-key>")
dbutils.fs.mount(source = "abfss://<container-name>@<your-storage-account-name>.dfs.core.windows.net/", mount_point = "/mnt/test")
傅元龙
2023-03-14

完整的配置密钥称为“spark.hadoop.fs.azure.account.key.adlsiqdigital.dfs.core.windows.net

但是,对于生产环境来说,使用服务帐户和装载点是有益的。这样,存储上的操作可以更容易地追溯到该应用程序,而不仅仅是使用通用访问键和挂载点,从而避免在代码中到处指定连接字符串。

 类似资料:
  • 我在努力学习火花,数据库 我正在尝试使用Pyspark从数据砖访问GEN2。我找不到合适的方法,我相信它超级简单,但我失败了。 目前每次我都会收到以下邮件: 我已经运行了GEN2,我有一个SAS_URI访问。 到目前为止,我正在尝试:(基于此链接:https://learn.microsoft.com/pl-pl/azure/databricks/data/data-sources/azure/a

  • 我有包含 Blob 容器的 ADLS 存储帐户。我已经成功地在数据砖中将 ADLS 与服务主体一起挂载,并且能够对数据进行必要的转换。 现在,我正在使用用户分配的托管身份来避免在代码中保留机密。为此,我创建了所需的托管身份,并通过在存储帐户中分配必要的角色来为我的服务主体启用它。 我的问题是,如何使用托管标识,或者如何在不装载或使用机密的情况下从 Databricks 对 ADLS 存储进行转换?

  • 在我们这家小公司的团队中,我遇到了一些挫折,围绕着使用Azure Databricks中将Azure Databricks作为我们的增量表的后端(我是这家公司和Databricks的新手,所以我可能解释的任何事情都是在我之前决定的,我意识到其中一些可能是有问题的, 但不是寻找对此的看法)。 本质上,工程团队正在构建数据摄取管道(作为python文件,而不是笔记本),这些管道在Azure Datab

  • 问题内容: 我有一个要求,即只能从本地主机访问mysql数据库。我必须实现一个可以访问数据库的servlet,以允许该系统中的其他服务器访问数据(servlet可以充当代理)。但是,此系统由一个远程服务器组成,该服务器下载执行以下语句的大部分数据: 有人可以建议我如何编写一个以有效方式流式传输此类数据的servlet吗(我是数据库新手)? 问题答案: 首先,我不建议为此使用servlet。有关正确

  • 问题内容: 我在Data Lake Gen2中拥有一个Azure存储帐户。我想使用Python(或Java)将数据从本地上传到Lake Gen2文件系统。 我已经找到了有关如何与存储帐户中的文件共享进行交互的示例,但是我仍无法找到如何上传到Lake(而不是文件共享)的示例。我还发现了如何在Gen1 Lakes上执行此操作,但是除了已关闭的Gen2 请求外,什么都没有。 我的问题是,到今天为止,是否

  • 我是使用API的新手。我只想从API中获取数据并将其存储在数据库中。我知道python中有很多库/包可以从特定的API中提取数据(例如Google API:google-api-python-client)。那么有没有通用库可以从API中获取数据呢? 非常感谢。