如何连接两个DataFrame并在spark中有条件地替换一列

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".

谢谢!

Tza*_*har 5

您可以使用coalesce,它返回不是null给定列的第一列.加-使用left加入你应该加入df1df2而不是周围的其他方式:

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)