我不确定用什么好的方式表达这个问题,但举一个例子会有帮助。下面是我对列的数据格式: name、type和count:
+------+------+-------+
| Name | Type | Count |
+------+------+-------+
| a | 0 | 5 |
| a | 1 | 4 |
| a | 5 | 5 |
| a | 4 | 5 |
| a | 2 | 1 |
| b | 0 | 2 |
| b | 1 | 4 |
| b | 3 | 5 |
| b | 4 | 5 |
| b | 2 | 1 |
| c | 0 | 5 |
| c | ... | ... |
+------+------+-------+
我希望得到一个新的数据格式,在这种结构中,Type列值已经变成了新列:
+------+---+-----+---+---+---+---+
| Name | 0 | 1 | 2 | 3 | 4 | 5 | <- Number columns are types from input
+------+---+-----+---+---+---+---+
| a | 5 | 4 | 1 | 0 | 5 | 5 |
| b | 2 | 4 | 1 | 5 | 5 | 0 |
| c | 5 | ... | | | | |
+------+---+-----+---+---+---+---+
这里的列是名称,0,1,2,3,4,5。
发布于 2018-03-02 05:35:55
这是通过使用星火中的pivot
函数来实现的。
val df2 = df.groupBy("Name").pivot("Type").sum("Count")
在这里,如果两行的名称和类型是相同的,那么简单地将计数值相加在一起,但是其他聚合也是可能的。
在问题中使用示例数据时产生的数据:
+----+---+----+----+----+----+----+
|Name| 0| 1| 2| 3| 4| 5|
+----+---+----+----+----+----+----+
| c| 5|null|null|null|null|null|
| b| 2| 4| 1| 5| 5|null|
| a| 5| 4| 1|null| 5| 5|
+----+---+----+----+----+----+----+
https://stackoverflow.com/questions/49063212
复制相似问题