apache-spark - 在 Spark 中读取数据框中的 XML 列
问题描述
我有以下数据框
+-----------+------+------------------------------------------------------------------
|ID |xml |
+-----------+------+-----------------------------------------------------------------
|1 |<root><line><colX>1</colX></line><line><colX>2</colX></line></root> |
|2 |<root><line><colX>3</colX></line><line><colX>4</colX></line> </root>
+-----------+------+-----------------------------------------------------------------
如何使用 databricks 中的 sparkXML 将其转换为原始 spark sql 中的以下内容
+-----------+------+------------------------------------------------------------------
|ID |colx |
+-----------+------+-----------------------------------------------------------------
|1 | 1
1 2
|2 | 3
2 3
+-----------+------+-----------------------------------------------------------------
解决方案
您可以使用 xpath 将元素选择到数组中并分解生成的数组:
df2 = df.selectExpr('ID', "explode(xpath(xml, 'root/line/colX/text()')) as colx")
df2.show()
+---+----+
| ID|colx|
+---+----+
| 1| 1|
| 1| 2|
| 2| 3|
| 2| 4|
+---+----+
推荐阅读
- apollo-server - 如何将 GraphQLObjectType 与 graphql-tag 和 gql-tag 创建的模式结合起来?
- javascript - Vue 组件未使用插件语法加载
- algorithm - 改进/优化我糟糕代码的指南是 scala 中的图二分法
- javascript - iframe:设置 document.location 2x 后的白屏
- arrays - 复杂的 NumPy 数组操作
- php - Laravel 7 自定义 Artisan 命令使用现有类抛出 BindingResolutionException
- python - 加快搜索最小的 x 使得 f(x) = target
- python - 如何阻止 Plotly Scatter 创建不存在的 X 值
- discord - 使用 discord.js-commando 运行命令时,通过通道 ID 加入预先确定的语音通道
- google-cloud-platform - 项目未出现在“gcloud 项目列表”中