我有两个数据帧,例如,
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中。
在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) : _*)