如何将Nx3火花数据帧转换为NxN矩阵,第三列数据帧是矩阵的值?

问题描述:

我有一个火花数据帧的形式如何将Nx3火花数据帧转换为NxN矩阵,第三列数据帧是矩阵的值?

id | day |value 
-----| ----- | ----- 
101 | 1  | 34 
101 | 2  |26 
102 | 2  |43 
102 | 1  |12 

我想将其转换为一个矩阵这样

 1 | 2 
--------------- 
101 | 34 | 26 
102 | 12 | 43 

在R,acast功能是有在reshape2包,它不完全一样的东西,即采取3列的数据帧,并将其转换为矩阵。我想在Spark Scala中做同样的事情。

我在Zeppelin 0.7.2界面中使用spark 2.1。

+1

** df.groupBy( '​​ID')。枢轴( '天')**在pyspark –

鉴于数据帧

+---+---+-----+ 
|id |day|value| 
+---+---+-----+ 
|101|1 |34 | 
|101|2 |26 | 
|102|2 |43 | 
|102|1 |12 | 
+---+---+-----+ 

,你应该做到以下几点

import org.apache.spark.sql.functions._ 
df.orderBy("day").groupBy("id").pivot("day").agg(first("value")) 

你应该有输出

+---+---+---+ 
|id |1 |2 | 
+---+---+---+ 
|101|34 |26 | 
|102|12 |43 | 
+---+---+---+