我是 spark 的新手,我想在 源数据帧 下方进行 转换(从 JSON 文件加载):
+--+-----+-----+
|A |count|major|
+--+-----+-----+
| a| 1| m1|
| a| 1| m2|
| a| 2| m3|
| a| 3| m4|
| b| 4| m1|
| b| 1| m2|
| b| 2| m3|
| c| 3| m1|
| c| 4| m3|
| c| 5| m4|
| d| 6| m1|
| d| 1| m2|
| d| 2| m3|
| d| 3| m4|
| d| 4| m5|
| e| 4| m1|
| e| 5| m2|
| e| 1| m3|
| e| 1| m4|
| e| 1| m5|
+--+-----+-----+
进入 以下 结果数据框:
+--+--+--+--+--+--+
|A |m1|m2|m3|m4|m5|
+--+--+--+--+--+--+
| a| 1| 1| 2| 3| 0|
| b| 4| 2| 1| 0| 0|
| c| 3| 0| 4| 5| 0|
| d| 6| 1| 2| 3| 4|
| e| 4| 5| 1| 1| 1|
+--+--+--+--+--+--+
这是 转换规则:
- 结果数据框由
A + (n major columns)
组成,其中major
列名称由以下内容指定:
sorted(src_df.map(lambda x: x[2]).distinct().collect())
- 结果数据框包含
m
行,其中A
列的值由:
sorted(src_df.map(lambda x: x[0]).distinct().collect())
结果数据帧中每个主要列的值是源数据帧中对应的
A
和主要列的值(例如,源数据帧中第 1 行中的计数映射到box
其中A
是a
和列m1
)A
和major
在源数据框中的组合没有重复(请将其视为SQL中两列的主键)
原文由 resec 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我们从示例数据开始:
请注意,我已将
count
更改为cnt
。 Count 是大多数 SQL 方言中的保留关键字,它不是列名的好选择。至少有两种方法可以重塑这些数据:
groupBy
超过RDD