我想使用 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: 无法解析给定输入列的“
”:[描述, 价格、流派、发布日期、标题、_id、作者];; '项目 ['dt_creation]dt_creation
如何真正提取存在于 rowTag 之外的此类 rootTag 元素?
我认为不可能获取rootTag属性。请参考此问题:https://github.com/databricks/spark-xml/issues/503
您可以在根处读取 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))```