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 一一完成,但这需要很多时间。
有没有办法可以运行一些循环并继续添加列,直到我的条件用尽。
提前谢谢了。
您可以使用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)
所以,基本上发生的事情是你折叠你创建的序列,同时从原始数据帧开始并在你继续遍历列表时应用转换。