如何从 spark 数据框列中读取 xml 数据

How to read xml data from a spark dataframe column

我有一个 spark 数据框,它有一个列 valuekey 和其他列,value 列有一个 xml as string

现在我想创建一个新的数据框,其中 value 列的 xml 内容被读取为好像我正在读取 spark.read.xml 并附加其他列,如 [=14] =] 到新的 DF

这可能吗?

我通常使用这个

阅读xml文件
dfx = spark.read.load('books.xml', format='xml', rowTag='bks:books', valueTag="_ele_value")
dfx.schema

尝试从 value 列读取时尝试获得类似的数据帧输出(这来自 kafka)

我的 xml 有很深的嵌套结构,只是书的一个例子 xml 有 2 层嵌套

<?xml version="1.0" encoding="UTF-8"?>
<bks:books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bks="urn:books"
           xsi:schemaLocation="urn:books books.xsd" xmlns:ot="http://maven.apache.org/POM/4.0.0">
    <book id="b001">
        <author>Brandon Sanderson</author>
        <title>Mistborn</title>
        <genre sub='epic'>Fantasy</genre>
        <price>50</price>
        <pub_date>2006-12-17T09:30:47.0Z</pub_date>
        <review>
            <title>Wonderful</title>
            <content>I love the plot twist and the new magic</content>
        </review>
        <review>
            <title>Unbelievable twist</title>
            <content>The best book i ever read</content>
        </review>
        <sold>10</sold>
    </book>
    <book id="b002">
        <author>Brandon Sanderson</author>
        <title>Way of Kings</title>
        <genre sub='epic'>Fantasy</genre>
        <price>50</price>
        <pub_date>2006-12-17T09:30:47.0Z</pub_date>
        <sold>10</sold>
    </book>
</bks:books>

看起来这可以使用 XmlReader 实现(但仅在 scala 中)

val rdd:RDD[String] = df.select("value").as[String].rdd
var schema: StructType = null
var parameters = collection.mutable.Map("rowTag" -> "bks:books", "valueTag" -> "_ele_value")

val new_df = new XmlReader().withRowTag("bks:books").withValueTag("_ele_value").withSchema(schema).xmlRdd(spark, rdd)

但这种方法的问题是,我们失去了 value 与初始数据帧中其他列之间的任何关系

如果有人知道 link 的方法,请告诉我:)