如何为存在的每一行在Spark数据框中添加新列?

时间:2019-03-13 10:20:02

标签: scala apache-spark apache-spark-sql

我正在尝试使用Spark数据帧创建一个比较矩阵,并且首先创建一个单列数据帧,每个值一行:

val df = List(1, 2, 3, 4, 5).toDF

从这里开始,我需要为每一行创建一个新列,然后(现在)在每个空间中插入一个随机数,如下所示:

  Item   1   2   3   4   5  
 ------ --- --- --- --- --- 
     1   0   7   3   6   2  
     2   1   0   4   3   1  
     3   8   6   0   4   4  
     4   8   8   1   0   9  
     5   9   5   3   6   0  

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:-1)

考虑使用df函数来转置名为.pivot()的输入DataFrame,如下所示:

val output = df.groupBy("item").pivot("item").agg((rand()*100).cast(DataTypes.IntegerType))

这将生成一个新的DataFrame,该数据帧具有与行值相对应的随机Integer值(否则为null)。

+----+----+----+----+----+----+
|item|1   |2   |3   |4   |5   |
+----+----+----+----+----+----+
|1   |9   |null|null|null|null|
|3   |null|null|2   |null|null|
|5   |null|null|null|null|6   |
|4   |null|null|null|26  |null|
|2   |null|33  |null|null|null|
+----+----+----+----+----+----+

如果您不希望使用null值,则可以考虑在以后应用UDF。