簡體   English   中英

Spark DataFrame 中的條件連接

[英]Conditional Join in Spark DataFrame

我正在嘗試加入兩個DataFrame

我有兩個數據框 A 和 B。

A 包含 id,m_cd 和 c_cd 列 B 包含 m_cd,c_cd 和 record 列

條件是——

  • 如果 m_cd 為空,則將 A 的 c_cd 與 B 連接
  • 如果 m_cd 不為空,則將 A 的 m_cd 與 B 連接

我們可以在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM