使用我的免费试用 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 行
%sql 创建外部位置 silv_layer URL“abfss://[电子邮件受保护]/retailfiles/” with (CREDENTIAL (STORAGE_ACCOUNT_KEY = 'GlGLL4o2tXZUawz0CqVgguhKGsAN2YLQRIUs56yw8PHTw8zYQIWc2+gWFojXFWWo/puH/Q2e/t6B+AStOAyWig=='));
仍然出现此错误: [PARSE_SYNTAX_ERROR]“LOCATION”处或附近存在语法错误。 SQLSTATE:42601
#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 行
我收到了相同的错误,下面是错误详细信息:
错误[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)
结果:
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|
+--------------+