[英]Conditional Join in Spark DataFrame
我正在尝试加入两个DataFrame
。
我有两个数据框 A 和 B。
A 包含 id,m_cd 和 c_cd 列 B 包含 m_cd,c_cd 和 record 列
条件是——
我们可以在withcolumn
() 方法中使用“ when
”和“ otherwise
()”,那么对于加入数据帧的情况有什么方法可以做到这一点。
我已经使用Union
完成了此操作。但想知道是否还有其他选项可用。
您可以在连接条件中使用“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
但是,使用联合可能仍然更具可读性。
如果有人试图在 Pyspark 中做到这一点,这里是 sintaxe
join_condition = when(df1.azure_resourcegroup.startswith('a_string'),df1.some_field == df2.somefield)\
.otherwise((df1.servicename == df2.type) &
(df1.resourcegroup == df2.esource_group) &
(df1.subscriptionguid == df2.subscription_id))
df1 = df1.join(df2,join_condition,how='left')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.