如何将数据框行值转换为动态列?

时间:2018-12-17 11:56:46

标签: scala apache-spark-sql databricks

我有一个dataFrame如下

-----------------------------
|  A   |   B       |   C    |  
-----------------------------
|  1   |  col_1   |   val1   |  
|  1   |  col_2   |   val2   |  
|  1   |  col_3   |   val3   |  
|  1   |  col_4   |   val4   |  
-----------------------------

我需要如下转换

-----------------------------------------------
|  A   |  col_1  |   col_2  |   col_3 | col_4 |
-----------------------------------------------
|  1   |  val1   |  val2    |  val3  |  val4  |
-----------------------------------------------

如何使用scala + spark-sql执行此操作?任何线索都将受到高度赞赏。

1 个答案:

答案 0 :(得分:4)

一个groupBy和一个agg子句应该足够了:

df.groupBy("A").pivot("B").agg(first("C"))

与groupB首先,您将可能的值进行分组,然后根据键列(在您的情况下为B)旋转并获得值(C)

输入

df.show
+---+-----+----+
|  A|    B|   C|
+---+-----+----+
|  1|col_1|val1|
|  1|col_2|val2|
|  1|col_3|val3|
|  1|col_4|val4|
+---+-----+----+

输出

+---+-----+-----+-----+-----+
|  A|col_1|col_2|col_3|col_4|
+---+-----+-----+-----+-----+
|  1| val1| val2| val3| val4|
+---+-----+-----+-----+-----+