2017-04-08 70 views
0

我一直在为此挣扎大约3个小时。 Running Spark 1.6SPARK SQL CASE当> 0

试图让它在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; 
+1

您应该删除两个'evt_acct_app_id'之一。 – kennytm

回答

0

尝试以下:

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

1

如果您比较整数不要使用单引号:

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

此外,当你有比较表达式,用于CASE正确的语法不具备CASE后列名。

0

试试这个:

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

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