首页 > 解决方案 > 从 PySpark DataFrame 中的 XML 字段创建新列

问题描述

在我的 DataFrame 对象中,我有一个 column 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,XY属性,我想为每个创建一个列。

如何解析 XML 以便为每个属性创建新列?这是否需要每个属性的 UDF,或者是否可以在一个函数中将所有三个提取到单独的列中?

到目前为止,我收到一个错误:

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

标签: pythonapache-sparkpysparkpyspark-dataframes

解决方案


正如mck 所建议的那样,xml看起来不正确,您可以安装一个 maven 包 -com.databricks:spark-xml_2.11:0.10.0并使用直接读取 xml 文件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]]|
+--------------+--------------------------------+

推荐阅读