Siy*_*eng 1 sql scala join apache-spark
有两个数据帧.为简单起见,我把它们如下:
DataFrame1
id | name
-----------
0 | Mike
1 | James
Run Code Online (Sandbox Code Playgroud)
DataFrame2
id | name | salary
-------------------
0 | M | 10
1 | J | 20
2 | K | 30
Run Code Online (Sandbox Code Playgroud)
我想加入两个DataFrame id,只保留DataFrame1中的列name,同时保留原始的列,如果DataFrame2中没有对应的话.id
它应该是:
id | name | salary
--------------------
0 | Mike | 10
1 | James | 20
2 | K | 30
Run Code Online (Sandbox Code Playgroud)
直到现在,我只知道如何通过以下方式连接两个数据帧:
df1.join(df2, df1("id")===df2("id"), "left").select(df2("id"), df1("name"), df2("salary"))
Run Code Online (Sandbox Code Playgroud)
但它将使用null来忽略名称值"K".
谢谢!
您可以使用coalesce,它返回不是null给定列的第一列.加-使用left加入你应该加入df1到df2而不是周围的其他方式:
import org.apache.spark.sql.functions._
df2.join(df1, df1("id")===df2("id"), "left")
.select(df2("id"), coalesce(df1("name"), df2("name")), df2("salary"))
Run Code Online (Sandbox Code Playgroud)