python - Spark Dataframe Pivot w/o Aggregate
问题描述
我有一堆 json 文档,对应于数据库更改..类似于这种格式:
{
"key": "abc",
"timestamp": 1573085110000,
"cols": [{
"name": "COL1",
"value": "14",
}, {
"name": "COL2",
"value": "Some Text",
}
]
}
将其加载到 spark 数据框会产生:
+---+-------------+--------------------+
|key| timestamp| cols|
+---+-------------+--------------------+
|abc|1573084821000|[[COL1, 14], [COL...|
|def|1573171513000|[[COL1, xx], [COL...|
| | | |
+---+-------------+--------------------+
我爆炸了cols
数组,所以现在 db 列名在行上,呃
+---+----+---------+
|key|name| value|
+---+----+---------+
|abc|COL1| 14|
|abc|COL2|Some Text|
| | | |
+---+----+---------+
现在,我想到了枢轴……所以我开始写:
dt.groupBy($"key").pivot("name").agg($"value")
在这一点上,我显然意识到 spark 不允许在非数字 cols 上进行聚合..
所以本质上,考虑到数据在 json 中定义的令人讨厌的方式。有没有更好的方法来实现这一点:
+---+----+---------+
|key|COL1| COL2|
+---+----+---------+
|abc|14 |Some Text|
| | | |
+---+----+---------+
需要回家,度过了漫长的一天.. 可能缺少一些明显的东西,ta!
解决方案
发布后不到 5 分钟,我想通了..
dt.groupBy($"key").pivot($"name").agg(first($"value"))
推荐阅读
- c# - 如何使用 C# 中的 WooCommerce 发布记录
- python - 如何将一列的 Pandas 字符串值转换为字符串列表的一列?
- python - 在 Python 中读取 Sharepoint Excel 文件 - Pandas
- reactjs - 过滤获取数据到复选框 react.js
- d3.js - D3 力图奇数链接行为
- javascript - 在会话存储键值对中,值字符串的长度是否有字符限制?
- android - 应用程序不断收到 Resources$NotFoundException
- javascript - 用户单击图像时如何记录正确的对象值?
- python-3.x - 域过滤器没有效果(odoo12)
- reactjs - ReCharts:如果一开始就隐藏了线条动画,如何启用它?