有两个数据框。为了简单起见,我将它们表示如下:
数据框1
id | name
-----------
0 | Mike
1 | James
数据框2
id | name | salary
-------------------
0 | M | 10
1 | J | 20
2 | K | 30
我想加入
id
上的两个DataFrame,并且仅将ojit_code列保留在 DataFrame1 中,而如果 DataFrame2 中没有对应的name
,则保留原始的一列。它应该是:
id | name | salary
--------------------
0 | Mike | 10
1 | James | 20
2 | K | 30
到现在为止,我只知道如何通过以下方式将两个数据框连接起来:
df1.join(df2, df1("id")===df2("id"), "left").select(df2("id"), df1("name"), df2("salary"))
但是它将使用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"))
关于sql - 如何在Spark中有条件地联接两个DataFrame并替换一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40960356/