我想知道将以下源数据集转换为目标数据集的最佳方法是什么:
来源数据集:
ID | Type | Count
111| A | 1
111| B | 2
111| C | 1
222| A | 3
333| C | 2
目标数据集:
ID |#ofTypeA | #ofTypeB | #ofTypeC
111 | 1 | 2 | 1
222 | 3 | 0 | 0
333 | 0 | 0 | 2
源数据集是使用GroupBy(ID,Type).count()从原始数据集创建的。 现在,我能想到的唯一方法是将原始数据集与源数据集连接多次,每次创建一个新列来计算每种类型。 但它将在3个连接中解决。 我想知道是否有更好的方法来做到这一点
原始数据集如下:
ID | Type
111| A
111| B
111| B
.......
答案 0 :(得分:3)
您可以pivot
使用groupby
来获得所需的结果
val df = Seq(
(111, "A", 1),
(111, "B", 2),
(111, "C", 1),
(222, "A", 3),
(333, "C", 2)
).toDF("Id", "Type", "Count")
df.groupBy("Id")
.pivot("Type")
.agg(sum($"Count"))
.na.fill(0)
.show(false)
您可以使用na.fill(0)
将null
替换为0
希望这有帮助!