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

How to convert dataframe rows values to dynamic columns?

我有一个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 做到这一点?非常感谢任何线索。

一个 groupBy 和一个 agg 子句就足够了:

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

首先使用 groupBy 对可能的值进行分组,然后根据键列(在您的情况下为 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|
+---+-----+-----+-----+-----+