[英]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.