在连接条件的spark dataframe中使用case语句

a1o7rhls  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(700)

如何在spark中连接两个Dataframe时使用case条件。

var date_a = s"CASE WHEN month(to_date(from_unixtime(unix_timestamp(dt, 'dd-MM-yyyy')))) 
    IN  (01,02,03) THEN CONCAT(CONCAT(year(to_date(from_unixtime(unix_timestamp(dt, 'dd-MM-yyyy'))))-1,'-')
    ,substr(year(to_date(from_unixtime(unix_timestamp(dt, 'dd-MM-yyyy')))),3,4)) 
    ELSE CONCAT(CONCAT(year(to_date(from_unixtime(unix_timestamp(dt, 'dd-MM-yyyy')))),'-'),
    SUBSTR(year(to_date(from_unixtime(unix_timestamp(dt, 'dd-MM-yyyy'))))+1,3,4)) END"

    val gstr1_amend = df1.join(gstr1_amend_lkup_data, df1("date_b") === df2(date_a))

但我得到的错误案例不是一列。

gg58donl

gg58donl1#

而不是添加 case statement 在连接条件中,使用 when & otherwise 内部功能 withColumn 然后在连接条件中使用相同的列,如下所示。

val df2 = somedf
.withColumn("date_a",when([...]).otherwise([...])) // [...] is your case statement logic

val gstr1_amend = df1.join(df2, df1("date_b") === df2("date_a"))
yshpjwxd

yshpjwxd2#

我有一个小差异类似的情况,我想使用第二个Dataframe中的列,以防第一列中的列为空,这是要做的只有加入。无法使用大小写,但已连接到另一个键列,并在筛选器中使用大小写。不是优雅的解决方案,但有效。

相关问题