从pyspark dataframe中的xml字段创建新列

holgip5t  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(494)

在我的dataframe对象中有一个列 Foos ,例如

<?xml version="1.0" encoding="utf-8"?> <foos> <foo id="123" X="58" Y="M" /> <foos id="456" X="29" Y="M" /> <foos id="789" X="44" Y="F" /> </foos>

每个 <foo> 有一个 foo id , X 以及 Y 属性,我要为每个属性创建一列。
如何解析xml以便为每个属性创建新列?这是否要求每个属性都有一个自定义项,或者是否可以在一个函数中将所有三个属性提取到单独的列中?
到目前为止,我收到一个错误:

parsed = (lambda x: ET.fromstring(x).find('X').text)
udf = udf(parsed)
parsed_df = df.withColumn("X Column", udf("Foos"))
mzsu5hc0

mzsu5hc01#

正如mck建议的那样,xml看起来不正确,您可以安装一个maven包- com.databricks:spark-xml_2.11:0.10.0 并使用 spark.read ```
df = spark.read
.format("com.databricks.spark.xml")
.option("rowTag", "foos")
.load("/FileStore/tables/test.xml")
df.show(truncate=False)


#### 这是我得到的,根据你提供的xml文件,你可能需要查看xml文件

+--------------+--------------------------------+
|foo |foos |
+--------------+--------------------------------+
|[, 58, M, 123]|[[, 29, M, 456], [, 44, F, 789]]|
+--------------+--------------------------------+

相关问题