条件加入Spark DataFrame

时间:2016-09-09 17:54:40

标签: scala apache-spark

我正在尝试加入两个DataFrame条件。

我有两个数据帧A和B.

包含id,m_cd和c_cd列 B包含m_cd,c_cd和记录列

条件是 -

  • 如果m_cd为null,则将A的c_cd与B
  • 连接
  • 如果m_cd不为null,则将A的m_cd与B
  • 连接

我们可以在数据框的when()方法中使用“otherwise”和“withcolumn()”,那么对于数据框架中的连接情况有没有办法做到这一点

我已经使用Union完成了此操作。但想知道是否还有其他选项。

1 个答案:

答案 0 :(得分:7)

你可以使用"当" /"否则"在连接条件中:

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可能仍然更具可读性。