【问题标题】:File read from ADLS Gen2 Error - Configuration property xxx.dfs.core.windows.net not found从 ADLS Gen2 读取文件错误 - 找不到配置属性 xxx.dfs.core.windows.net
【发布时间】:2020-12-03 14:20:29
【问题描述】:

我正在使用来自 Databricks 笔记本的 ADLS Gen2,它试图使用“abfss”路径处理文件。 我能够很好地读取镶木地板文件,但是当我尝试加载 XML 文件时,我收到错误找不到配置 - 找不到配置属性 xxx.dfs.core.windows.net。

我没有尝试安装文件,但试图了解它是否是 XML 文件的已知限制,因为我能够很好地读取镶木地板文件。

这是我的 XML 库配置 com.databricks:spark-xml_2.11:0.9.0

我根据其他文章尝试了几件事,但仍然遇到同样的错误。

  • 添加了一个新范围以查看它是否是 Databricks 工作区中的范围问题。
  • 尝试添加配置 spark.conf.set("fs.azure.account.key.xxxxx.dfs.core.windows.net", "xxxx==")
df = spark.read.format("xml")
 .option("rootTag","BookArticle")
 .option("inferSchema", "true")
 .option("error_bad_lines",True)
 .option("mode", "DROPMALFORMED")
 .load(abfsssourcename)   ##abfsssourcename is the path of the source file name

Exception Details: Py4JJavaError: An error occurred while calling o1113.load. 
Configuration property xxxx.dfs.core.windows.net not found. at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AbfsConfiguration.getStorageAccountKey(AbfsConfiguration.java:392) at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.initializeClient(AzureBlobFileSystemStore.java:1008) at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.<init>(AzureBlobFileSystemStore.java:151) at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.initialize(AzureBlobFileSystem.java:106) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.setInputPaths(FileInputFormat.java:500) at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.setInputPaths(FileInputFormat.java:469) at org.apache.spark.SparkContext$$anonfun$newAPIHadoopFile$2.apply(SparkContext.scala:1281) at org.apache.spark.SparkContext$$anonfun$newAPIHadoopFile$2.apply(SparkContext.scala:1269) at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) at org.apache.spark.SparkContext.withScope(SparkContext.scala:820) at org.apache.spark.SparkContext.newAPIHadoopFile(SparkContext.scala:1269) at com.databricks.spark.xml.util.XmlFile$.withCharset(XmlFile.scala:46) at com.databricks.spark.xml.DefaultSource$$anonfun$createRelation$1.apply(DefaultSource.scala:71) at com.databricks.spark.xml.DefaultSource$$anonfun$createRelation$1.apply(DefaultSource.scala:71) at com.databricks.spark.xml.XmlRelation$$anonfun$1.apply(XmlRelation.scala:43) at com.databricks.spark.xml.XmlRelation$$anonfun$1.apply(XmlRelation.scala:42) at scala.Option.getOrElse(Option.scala:121) at com.databricks.spark.xml.XmlRelation.<init>(XmlRelation.scala:41) at com.databricks.spark.xml.XmlRelation$.apply(XmlRelation.scala:29) at com.databricks.spark.xml.DefaultSource.createRelation(DefaultSource.scala:74) at com.databricks.spark.xml.DefaultSource.createRelation(DefaultSource.scala:52) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:350) at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:311) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:297) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:214) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

【问题讨论】:

  • 该包似乎使用RDD API读取xml文件,因此我们需要将密钥保存在Hadoop配置选项中。请将代码更新为spark._jsc.hadoopConfiguration().set("fs.azure.account.key.xxxxx.dfs.core.windows.net", "xxxx==")。更多详情请参考docs.databricks.com/data/data-sources/azure/…
  • @JimXu,这行代码解决了这个问题。我使用 mount 作为替代解决方案,但您的回答是我问题的答案:)
  • 嗨。我将我的建议总结为解决方案。既然它对你有用,你能接受它作为答案吗?它可能会帮助更多有类似问题的人。
  • 感谢总结,采纳为答案!

标签: azure-databricks azure-data-lake-gen2 apache-spark-xml


【解决方案1】:

我将解决方案总结如下。

com.databricks:spark-xml 包似乎使用 RDD API 来读取 xml 文件。当我们使用 RDD API 访问 Azure Data Lake Storage Gen2 时,我们无法访问使用 spark.conf.set(...) 设置的 Hadoop 配置选项。所以我们应该将代码更新为spark._jsc.hadoopConfiguration().set("fs.azure.account.key.xxxxx.dfs.core.windows.net", "xxxx==")。更多详情请参考here

此外,您还可以将 Azure Data Lake Storage Gen2 挂载为 Azure databricks 中的文件系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 2020-04-20
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2021-06-26
    相关资源
    最近更新 更多