错误:在 azuredatabricks 免费试用版上创建数据框并在 ADLS 中另存为表时找不到父外部位置

问题描述 投票:0回答:1

使用我的免费试用 Azure 帐户,我正在尝试 将 csv 文件复制到 ADLS Gen2 并将数据帧保存为 adls silver 层中的表格。

代码: DForderItems = Spark.read.csv("abfss://[电子邮件受保护]/retailfiles/orderItems.csv",header=False,schema=schema) ** 我能够将 csv 文件读入 DForderitems ,但最棘手的部分是我无法将其保存为给定路径中的表格,如下所示。

DForderItems**.write.option("路径","abfss://[电子邮件受保护]/retailfiles/orderItems").option("mergedschema", True).mode("append" ).saveAsTable("retail.orderItems") ** 错误: ** [NO_PARENT_EXTERNAL_LOCATION_FOR_PATH] 找不到路径“abfss://[email protected]/retailfiles/orderItems”的父外部位置。请在父路径之一上创建外部位置,然后再次重试查询或命令。 文件,第 2 行

  1. 我尝试使用 sql 在外部位置创建一个表

%sql 创建外部位置 silv_layer URL“abfss://[电子邮件受保护]/retailfiles/” with (CREDENTIAL (STORAGE_ACCOUNT_KEY = 'GlGLL4o2tXZUawz0CqVgguhKGsAN2YLQRIUs56yw8PHTw8zYQIWc2+gWFojXFWWo/puH/Q2e/t6B+AStOAyWig=='));

仍然出现此错误: [PARSE_SYNTAX_ERROR]“LOCATION”处或附近存在语法错误。 SQLSTATE:42601

  1. 我尝试创建一个数据库并将表写入其中

#spark.sql

(“如果零售位置‘abfss://[email protected]/retailfilessilver’不存在,则创建数据库”) DForderItems.write.option("path","abfss://[电子邮件受保护]/retailfiles/orderItems").option("mergeschema", True).mode("append").saveAsTable("retail.orderItems ”)

但是我又遇到了一个错误 [NO_PARENT_EXTERNAL_LOCATION_FOR_PATH] 找不到路径“abfss://[email protected]/retailfiles/orderItems”的父外部位置。请在父路径之一上创建外部位置,然后再次重试查询或命令。 文件,第 2 行

apache-spark pyspark apache-spark-sql azure-databricks azure-data-lake
1个回答
0
投票

我收到了相同的错误,下面是错误详细信息:

错误[NO_PARENT_EXTERNAL_LOCATION_FOR_PATH] 找不到路径的父外部位置 'abfss://[电子邮件受保护]/Customer.csv。 请在父路径之一上创建外部位置,然后再次重试查询或命令。

上面的ERROR表示系统找不到指定的路径

我尝试过以下方法:

我已使用以下脚本安装了 ADLS:

configs = { 'fs.azure.account.auth.type': 'OAuth', 'fs.azure.account.oauth.provider.type': 'org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider', 'fs.azure.account.oauth2.client.id': '< YOUR CLIENT ID> ', 'fs.azure.account.oauth2.client.secret': dbutils.secrets.get(scope='dbxsecretscope', key='kvsecretname'), 'fs.azure.account.oauth2.client.endpoint': 'https://login.microsoftonline.com/< YOUR TENANT ID >/token' }

dbutils.fs.mount(source='abfss://[email protected]/', mount_point='/mnt/raw', extra_configs=configs)

注意:将 ADLS 装载到 azure databricks 时,您需要将 Storage Blob Data Contributor 角色添加到 ADLS,并将 Key Vault Administrator 角色添加到 Key Vault。

下面将让您列出您的挂载点:

display(dbutils.fs.mounts())

了解更多关于如何使用 SPN、Azure Key Vault 将 ADLS 安装到 Azure databricks

“接下来,我从 Azure Databricks 中的单个 CSV 文件创建了一个外部表作为示例。”

%sql
CREATE  TABLE  IF  NOT  EXISTS  hive_metastore.default.cust USING csv OPTIONS (path  "/mnt/raw/new/Customer.csv", inferSchema=True, header=True)

结果: enter image description here

df = spark.read.format("csv") \
.option("header", "true") \
.option("inferSchema", "true") \
.load("dbfs:/mnt/raw/new/Customer.csv")
df.show()
+--------------+
|          Col1|
+--------------+
|123,456@1234_1|
+--------------+

© www.soinside.com 2019 - 2024. All rights reserved.