python - 从 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
,X
和Y
属性,我想为每个创建一个列。
如何解析 XML 以便为每个属性创建新列?这是否需要每个属性的 UDF,或者是否可以在一个函数中将所有三个提取到单独的列中?
到目前为止,我收到一个错误:
parsed = (lambda x: ET.fromstring(x).find('X').text)
udf = udf(parsed)
parsed_df = df.withColumn("X Column", udf("Foos"))
解决方案
正如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]]|
+--------------+--------------------------------+
推荐阅读
- android - 如何在不点击的情况下在 x 秒后在 Kotlin 中的片段之间转换(如启动屏幕)
- javascript - 为什么增量运算符的位置很重要
- c# - 在 C# 中制作模型时遇到困难
- java - 如何修复写入文件内部存储器android的权限错误?
- flutter - Flutter:关闭 PageRoute 后,CupertinoTabScaffold 选项卡内容不刷新
- python - 将值与 pandas DataFrame 中的前一行进行比较并用黄色和绿色着色
- firebase - Imagepicker'XFile'不是类型转换和Firebase存储图像上传错误中'File'类型的子类型
- python - 熊猫如何将函数应用于 groupby().first()
- zpl - ZEBRA ZPL 标签格式与文本一起打印报价单
- tensorflow - 在 tensorflow 2.3 中执行量化感知训练 (QAT) 时无法访问正则化损失值