在我的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"))
1条答案
按热度按时间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)
+--------------+--------------------------------+
|foo |foos |
+--------------+--------------------------------+
|[, 58, M, 123]|[[, 29, M, 456], [, 44, F, 789]]|
+--------------+--------------------------------+