【问题标题】:Create new columns from XML field within PySpark DataFrame从 PySpark DataFrame 中的 XML 字段创建新列
【发布时间】:2021-02-18 15:22:19
【问题描述】:

在我的 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>

每个&lt;foo&gt; 都有一个foo idXY 属性,我想为每个属性创建一个列。

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

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

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

【问题讨论】:

标签: python apache-spark pyspark pyspark-dataframes


【解决方案1】:

由于 mck 建议 xml 看起来不正确,您可以安装一个 maven 包 - com.databricks:spark-xml_2.11:0.10.0 并直接阅读使用 spark.read

的 xml 文件
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]]|
+--------------+--------------------------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 2021-04-15
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多