加入 2 个数据帧时覆盖数据帧中的值

Overriding values in dataframe while joining 2 dataframes

在下面的示例中,我想用 Dataframe B 中的相应值(如果存在)覆盖 Spark Dataframe A 中的值。有没有办法使用 Spark (Scala) 来做到这一点?

数据帧 A

ID Name Age
1  Paul 30
2  Sean 35
3  Rob  25

数据帧 B

ID Name Age
1  Paul 40

结果

ID Name Age
1  Paul 40
2  Sean 35
3  Rob  25

结合使用 left joincoalesce 应该可以解决问题,例如:

dfA
  .join(dfB, "ID", "left")
  .select(
    dfA.col("ID"),
    dfA.col("Name"),
    coalesce(dfB.col("Age"), dfA.col("Age")).as("Age")
  )

说明:对于一个特定的IDsome_id,有2种情况:

  1. 如果 dfB 不包含 some_id:那么左连接将为 dfB.col("Age")coalesce 将 return 来自表达式的第一个 non-null 值 传递给它,即 dfA.col("Age")
  2. 的值
  3. 如果 dfB 包含 some_id,则将使用 dfB.col("Age") 中的值。