如何合并两个数据框并在spark中添加字段

时间:2019-03-29 20:52:23

标签: scala apache-spark dataframe merge

例如,我有两个数据框,

DF1
+----+-------+------+------+
|id  | value1|value2|value3|
+----+-------+------+------+
|  1 |10     |20    |30    |
|  2 |20     |30    |40    |
|  3 |30     |40    |50    |
+----+-------+------+------+

DF2
+----+-------+------+------+
|id  | value1|value2|value3|
+----+-------+------+------+
|  1 |100    |200   |300   |
|  2 |200    |300   |400   |
|  3 |300    |400   |500   |
+----+-------+------+------+

我想通过id合并这两个数据框,同时将两个数据框中具有相同名称的列一起添加。所以我想要的是这样的东西

+----+-------+------+------+
|id  | value1|value2|value3|
+----+-------+------+------+
|  1 |100+10 |200+20|300+30|
|  2 |200+20 |300+30|400+40|
|  3 |300+30 |400+40|500+50|
+----+-------+------+------+

通过火花合并部分相当容易

df1.join(df2,Seq("id"))

是否有一种有效的方法将两个数据框中具有相同名称的两列与上面的scala和spark一起添加。

1 个答案:

答案 0 :(得分:0)

在scala中,以通用方式操作列非常容易。您可以这样做。

// extract the names of the columns to sum
val cols = df1.columns.filter(_!="id") 

// join and sum
val result = df1
    .join(df2,Seq("id"))
    .select( col("id") +: cols.map(c=>df1(c)+df2(c) as c) : _*)