Scala 如何转换Spark数据帧,使我的值成为列名?
我不确定用什么好方法来表达这个问题,但举个例子会有所帮助。以下是我拥有的数据框,包括以下列:名称、类型和计数:Scala 如何转换Spark数据帧,使我的值成为列名?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我不确定用什么好方法来表达这个问题,但举个例子会有所帮助。以下是我拥有的数据框,包括以下列:名称、类型和计数: +------+------+-------+ |名称|类型|计数| +------+------+-------+ |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
+------+------+-------+
|名称|类型|计数|
+------+------+-------+
|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 |…||
+------+------+-------+
我希望得到一个新的数据帧,其结构如下,其中类型列值已成为新列:
+------+---+-----+---+---+---+---+
|命名| 0 | 1 | 2 | 3 | 4 | 5 |使用Spark中的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|
+----+---+----+----+----+----+----+