2017-04-08 4 views
0

Ich habe damit seit etwa 3 Stunden gekämpft. Laufender Spark 1.6SPARK SQL FALL WENN> 0

Der Versuch, dies im Function-SQl-Kontext zum Laufen zu bringen. evt_acct_app_id ist eine ganze Zahl, warum funktioniert das nicht, in SQL ist das einfach. Ich habe versucht, mehrere Variationen dieser, entfernen Apostroph und etc.

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

Halten Sie diesen Fehler: Haben Sie diese unbekannte Ausnahme:

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

Sie eine der beiden 'evt_acct_app_id' entfernen sollte. – kennytm

Antwort

0

unten Versuchen:

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

1

Verwenden Sie einfache Anführungszeichen nicht, wenn Sie auf eine ganze Zahl vergleichen:

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

Darüber hinaus, wenn Sie Ausdrücke zum Vergleich haben, die korrekte Syntax für CASE nicht einen Spaltennamen nach dem CASE hat.

0

Versuchen Sie folgendes:

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

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