我正在尝试加入两个DataFrame
条件。
我有两个数据帧A和B.
包含id,m_cd和c_cd列 B包含m_cd,c_cd和记录列
条件是 -
我们可以在数据框的when
()方法中使用“otherwise
”和“withcolumn
()”,那么对于数据框架中的连接情况有没有办法做到这一点
我已经使用Union
完成了此操作。但想知道是否还有其他选项。
答案 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可能仍然更具可读性。