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

Azure Databricks是否可以自动加载程序使用AD凭据传递?

鄢松
2023-03-14

使用自动加载器时,我无法通过ADLS Gen2的身份验证。我的Databricks群集已使用我的AD凭据启用。这种传递允许从ADLS Gen2进行以下读取和写入。

filepath_read = "abfss://container@storage_account.dfs.core.windows.net/output/parquet_file.pq"
filepath_write = "abfss://container@storage_account.dfs.core.windows.net/output/data_write/"
df = spark.read.parquet(filepath)
display(df)
df.write.mode("overwrite").parquet(filepath_write)

我假设如果useNotifications设置为false,这个访问将允许我创建一个流。但是,当尝试使用自动加载程序创建流式查询时,它会失败。我觉得这很奇怪,因为我假设我只需要读和写权限,因为我没有设置useNotifications为false的附加服务。我用以下内容初始化了流:

cloud_file = {"cloudFiles.format":"parquet",
              "cloudFiles.useNotifications":"false",
              "cloudFiles.subscripionId":subscripionId,
              "cloudFiles.connectionString":connection_string,
              "cloudFiles.tenantId":tenantId,
              "cloudFiles.resourceGroup":resourceGroup
              
              }
df_read_stream =(spark
     .readStream
     .format("cloudFiles")
     .options(**cloud_file)
     .schema(schema)
     .load("abfss://container@storage_account.dfs.core.windows.net/raw_landing"))

然后尝试使用以下内容写入流:


df_read_stream.writeStream \
    .format("delta") \
    .outputMode("append") \
    .foreachBatch(flatten) \
    .trigger(once = True) \
    .option("checkpointLocation",checkpoint_location) \
    .start("abfss://container@storage_account.dfs.core.windows.net/transformed/transformed_delta_table")

执行返回此错误:

com.databricks.backend.daemon.data.client.adl.AzureCredentialNotFoundException: Could not find ADLS Gen2 Token

即使启用了AD凭据传递,我还需要其他凭据来进行身份验证吗?

共有1个答案

桂丰
2023-03-14

出现上述错误主要是因为ADLS Gen2没有正确连接到Azure Database ricks

请遵循以下语法将ADLS Gen2连接到亚行,并确保复制存储帐户密钥。

将ADLS Gen2连接到Azure Databricks

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

如果您尝试装载,请遵循以下代码:

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

有关信息,请参阅此Microsoft官方文档,

在Azure数据块中配置自动加载器点击此链接,它有关于在Azure数据块上读写流数据的详细解释。

 类似资料:
  • 我正在尝试使用Appium在一个真正的硬件设备(苹果手机)上自动化我公司的应用程序,从应用商店下载。 正在寻求帮助。我试过: 下载appium 12.2 已安装的ios webkit远程调试器 从应用商店下载应用程序 将iPhone与Mac连接起来 输入UDID和BundeID,并将设备强制设置为iPhone,然后单击启动。 服务器已成功启动,但无法启动apium检查器

  • 问题内容: 如标题所述,我想基于仅在运行时可用的信息来动态加载(或不)动态加载Go软件包。 目的是允许用户通过添加新的本机脚本命令的自定义程序包扩展程序。当前,每次我添加新命令或禁止使用某些命令时,都需要编辑程序并重新编译,而如果我可以制作某种dll之类的文件,则可以创建一个“导入”脚本命令来搜索和加载命名命令库。 出于好奇,该程序是基于定制命令的脚本库,我将其用于各种用途。 我提前进行了一些搜索

  • 我想格式化一个字符串,准备输出到终端窗口。终端窗口本身不会自动换行,所以我想在字符串中插入换行符。 有没有办法使用方法来实现这一点? 编辑:只是为了澄清。我不想将换行符硬编码到字符串中。 我想从这样的输入出发: Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eusmod tempor incidunt ut labor

  • 我们有一个web应用程序,我们想在“批处理”模式下运行,在这种模式下,我们不希望任何endpoint暴露(出于安全原因)。 这在SpringBoot可能吗?

  • 我正在使用azure AD Graph API在azure应用程序中创建一个新角色。我所做的是使用以下代码从azure获取访问令牌: 并使用以下代码创建角色: 我还向Microsoft Graph API授予了所有应用程序权限,而不是从Azure portal委派的权限。但我得到了这个错误: 访问令牌:从ADzure AD返回的访问令牌

  • 问题内容: 我正在建立一个新的由AJAX驱动的网站,其中包含不同的部分。每个部分都需要一组新的Javascript函数才能运行。我宁愿不要一开始就加载每个脚本,因为可能会有很多脚本。 有没有一种方法可以使用AJAX加载新脚本并删除旧脚本(以确保类似的变量名或函数签名不存在兼容性问题)。 谢谢 编辑 -jQuery很好,它不必是老式的Javascript 问题答案: 三件事: 1)是,您可以加载新脚