SPARK SQL CASE WHEN> 0

时间:2017-04-08 20:35:42

标签: sql apache-spark dataframe

我一直在努力争取这个约3个小时。 运行Spark 1.6

尝试在spark SQl上下文中使用它。 evt_acct_app_id是一个整数,为什么这不起作用,在sql中这很容易。我尝试了多种变体,删除了撇号等等。

CASE evt_acct_app_id
 WHEN evt_acct_app_id > '0' THEN '001'
 ELSE '002'
 END
 AS EVNT_SUBTYPE_CD,

继续收到此错误:获得此未知异常:

org.apache.spark.sql.AnalysisException: cannot resolve 'CASE evt_acct_app_id WHEN (cast(evt_acct_app_id as double) > cast(0 as double)) THEN 001 ELSE 002' 
due to data type mismatch: key and WHEN expressions should all be same type or coercible to a common type;

3 个答案:

答案 0 :(得分:1)

如果要与整数进行比较,请不要使用单引号:

(CASE WHEN evt_acct_app_id > 0 THEN '001'
      ELSE '002'
 END) as EVNT_SUBTYPE_CD,

此外,当您有表达式进行比较时,CASE的正确语法在CASE之后没有列名。

答案 1 :(得分:0)

尝试以下:

CASE  什么时候evt_acct_app_id> '0'那么'001'  ELSE'002'  结束  AS EVNT_SUBTYPE_CD,

答案 2 :(得分:0)

试试这个:

def evtChange(d:Column) = {when(d > 0,"001").otherwise("002")}

data.select( evtChange($"evt_acct_app_id").as("EVNT_SUBTYPE_CD") )