scala-Spark DataFrame 中的条件 join


0

我正在尝试 join两个具有条件的 DataFrame 。

我有两个 DataFrame A和B。

a包含id、m_cd和c_cd列

条件是-

    如果m-cd为空,则将a的c-cd与b join

我们可以在 DataFrame 的withColumn()方法中使用“when”和“otherwise()”,对于 DataFrame 中的join,有什么方法可以做到这一点。

我已经用union做了这个,但是想知道是否还有其他的选择。

1 答案

0

您可以在 join条件中使用“when”/“otherwise”:

case class Foo(m_cd: Option[Int], c_cd: Option[Int])
val dfA = spark.createDataset(Array(
    Foo(Some(1), Some(2)),
    Foo(Some(2), Some(3)),
    Foo(None: Option[Int], Some(4))
))


val dfB = spark.createDataset(Array(
Foo(Some(1), Some(5)),
Foo(Some(2), Some(6)),
Foo(Some(10), Some(4))
))

val joinCondition = when($"a.m_cd".isNull, $"a.c_cd"===$"b.c_cd")
.otherwise($"a.m_cd"===$"b.m_cd")

dfA.as('a).join(dfB.as('b), joinCondition).show

不过,使用 union可能仍然更易于阅读。


我来回答