sql - 如何在Spark中有条件地联接两个DataFrame并替换一列

标签 sql scala join apache-spark

有两个数据框。为了简单起见,我将它们表示如下:

数据框1

id | name
-----------
0  | Mike
1  | James

数据框2
id | name | salary
-------------------
0  | M    | 10
1  | J    | 20
2  | K    | 30

我想加入id上的两个DataFrame,并且仅将oj​​it_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/

相关文章:

sql - MYSQL如何在select查询中使用trim

mysql - 如何在SQL where 条件中放入If else 语句?

java - 从 Java 1.8 和 Scala 2.11 加载 CharSequence、AnnotatedElement 时出错

Scala:使用协变 Field[+T] 访问属性

SQL 计算连接表上的唯一真值

mysql - 连接两个表的数据,不管空数据如何

sql - 在 SQL Server 2008 中使用分组依据和排序依据检索结果时出错

IN CLause 中的 MYSQL 元组与通配符匹配

scala - SBT如何发布从运行命令生成的工件

mysql - 将 mysql 查询拆分为两个以避免 join -> sum ids 并使用 where in