Spark:连接数据框架



我需要像这样连接两个dataframe:

  1. 如果键匹配,从右侧获取值。
  2. 左边的If键在右边不存在。从左边开始取值
  3. 右边的If键在左边不存在。从右开始取值

使用dataframe最好的方法是什么?以前我使用RDD的"cogroup"方法来做这件事,这在DataFrames上是不可用的。

您可以简单地执行FULL OUTER JOIN并使用COALESCE

import org.apache.spark.sql.functions.coalesce
val dfLeft = sc.parallelize(Seq((2, "2L"), (3, "3L"))).toDF("kl", "vl")
dfLeft.show
## +---+---+
## | kl| vl|
## +---+---+
## |  2| 2L|
## |  3| 3L|
## +---+---+
val dfRight = sc.parallelize(Seq((1, "1R"), (3, "3R"))).toDF("kr", "vr")
dfRight.show
## +---+---+
## | kr| vr|
## +---+---+
## |  1| 1R|
## |  3| 3R|
## +---+---+
dfLeft
  .join(dfRight, $"kl" === $"kr", "fullouter")
  .select(coalesce($"kl", $"kr").alias("k"), coalesce($"vr", $"vl").alias("v"))
  .show
## +---+---+
## |  k|  v|
## +---+---+
## |  1| 1R|
## |  2| 2L|
## |  3| 3R|
## +---+---+

相关内容

  • 没有找到相关文章

最新更新