Spark 无法使用 Spark-xml 提取 rootTag 元素

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

我想使用 Spark (spark-xml 版本 0.13.0 scala 2.11)从 xml 文件中提取 rootTag 元素。但它无法这样做。 例如xml如下:

<?xml version="1.0"?>
<catalog>
   <dt_creation>13-03-2023</dt_creation> 
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>
         Oracle Streams Advanced Queuing XMLType support.
      </description></book><book id="bk102">
      <price>5.95</price>
   </book>
 </catalog>

我想使用 Spark 代码从 rootTag 获取 dt_creation 字段,如下所示:

val df = sparkSession.read
            .format("xml")
            .option("rootTag", "catalog")
            .option("rowTag", "book")
            .load(above-xml-file)

df.select("dt_creation").collect()

它导致

AnalysisException@12599“org.apache.spark.sql.AnalysisException: 无法解析给定输入列的“

dt_creation
”:[描述, 价格、流派、发布日期、标题、_id、作者];; '项目 ['dt_creation]

如何真正提取存在于 rowTag 之外的此类 rootTag 元素?

scala apache-spark apache-spark-sql user-defined-functions
2个回答
1
投票

我认为不可能获取rootTag属性。请参考此问题:https://github.com/databricks/spark-xml/issues/503


0
投票

您可以在根处读取 rowTag,然后将其分解并展开,如下所示。

    df = (spark.read.format("com.databricks.spark.xml")
          .option("rowTag", "catalog")
          .load(xmlFile)
          )

    df.printSchema()

    (df.withColumn("book", explode(col("book")))
     .select("dt_creation", "book.*")
     .show(truncate=False))```
© www.soinside.com 2019 - 2024. All rights reserved.