如何使用 SCALA 在火花数据框中添加多列

Rah*_*jee 2 scala dataframe apache-spark

我有一个条件,我必须在一年的 5 个月内添加 5 列(到现有的 DF)。

现有的 DF 是这样的:

EId EName Esal
1   abhi  1100
2   raj   300
3   nanu  400
4   ram   500
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

EId EName Esal Jan  Feb  March April May  
1   abhi  1100 1100 1100 1100  1100  1100 
2   raj   300  300  300  300   300   300  
3   nanu  400  400  400  400   400   400
4   ram   500  500  500  500   500   500
Run Code Online (Sandbox Code Playgroud)

我可以用 withColumn 一一完成,但这需要很多时间。

有没有办法可以运行一些循环并继续添加列,直到我的条件用尽。

提前谢谢了。

phi*_*ert 6

您可以使用foldLeft. 您需要创建一个List所需的列。

df.show
+---+----+----+
| id|name| sal|
+---+----+----+
|  1|   A|1100|
+---+----+----+

val list = List("Jan", "Feb" , "Mar", "Apr") // ... you get the idea

list.foldLeft(df)((df, month) => df.withColumn(month , $"sal" ) ).show
+---+----+----+----+----+----+----+
| id|name| sal| Jan| Feb| Mar| Apr|
+---+----+----+----+----+----+----+
|  1|   A|1100|1100|1100|1100|1100|
+---+----+----+----+----+----+----+
Run Code Online (Sandbox Code Playgroud)

所以,基本上发生的事情是你折叠你创建的序列,同时从原始数据帧开始并在你继续遍历列表时应用转换。

  • 该解决方案与_“我可以使用 withColumn 一个一个地完成此操作,但这需要很多时间。”_ 有何不同? (3认同)