如何在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))
但我得到的错误案例不是一列。
2条答案
按热度按时间gg58donl1#
而不是添加
case statement
在连接条件中,使用when & otherwise
内部功能withColumn
然后在连接条件中使用相同的列,如下所示。yshpjwxd2#
我有一个小差异类似的情况,我想使用第二个Dataframe中的列,以防第一列中的列为空,这是要做的只有加入。无法使用大小写,但已连接到另一个键列,并在筛选器中使用大小写。不是优雅的解决方案,但有效。