2017-12-28 12 views
0

Ich möchte die untere sql case-Anweisung in SparkAPI Java umschreiben. Wie kann ich das erreichen?Umschreiben der case-Anweisung SQL in die SparkAPI

CASE 
WHEN column1='abc' 
    AND 
    id='0' 
    AND 
    colNumber='31' THEN 
    'Group A' 
WHEN column1='def' 
    AND 
    id='0' 
    AND 
    colNumber='31' THEN 
    'Group B' 
WHEN column1='ghe' 
    AND 
    id='0' 
    AND 
    colNumber='31' THEN 
    'Group C' 
ELSE 
    description 
END AS CustomGroup 

Antwort

-1

Wenn Sie eine komplexe Logik haben, können Sie ein udf (User Defined Function) wie unten

val customGroup = udf((column1: String, id: String, colNumber: Int) => { 
    if (id.equals("0") && colNumber == 31){ 
     if (column1.equals("abc")) "GroupA" 
     else if (column1.equals("def")) "Group B" 
     else if (column1.equals("abc")) "Group C" 
     else "description" 
    } 
    else "description" 
    }) 

Jetzt erstellen Sie die UDF mit Datenrahmen wie unten

dataframe.withColumn("customGroup", customGroup(col("column1"), col("id"), col("colNumber"))) 

bearbeiten können: Wenn Die *description* ist aus einer anderen Spalte, dann müssen Sie es an die udf übergeben und fügen Sie es beim Aufruf auch.

Hoffe, das hilft!

+0

Ich denke, 'Beschreibung' ist eine andere Spalte in der OP-Tabelle anstelle eines Literals. – philantrovert

+0

Vielen Dank für den Vorschlag @philantrovert Ich werde es hinzufügen –

+0

Will dies versuchen und lassen Sie es wissen. –