【发布时间】:2022-01-23 12:14:08
【问题描述】:
我有一个由数据行和需要解析的 XML 列组成的数据框。我可以使用stack overflow solution 中的以下代码解析该 XML:
import xml.etree.ElementTree as ET
import pyspark.sql.functions as F
@F.udf('array<struct<id:string, age:string, sex:string>>')
def parse_xml(s):
root = ET.fromstring(s)
return list(map(lambda x: x.attrib, root.findall('visitor')))
df2 = df.select(
F.explode(parse_xml('visitors')).alias('visitors')
).select('visitors.*')
df2.show()
这个函数为解析的 XML 数据创建一个新的数据框。
相反,我如何修改此函数以包含原始数据框中的一列,以便以后加入?
例如,如果原始数据框如下所示:
+----+---+----------------------+
|id |a |xml |
+----+---+----------------------+
|1234|. |<row1, row2> |
|2345|. |<row3, row4>, <row5> |
|3456|. |<row6> |
+----+---+----------------------+
如何在新创建的数据框的每一行中包含 ID?
【问题讨论】:
标签: python apache-spark pyspark user-defined-functions