Erstellen Sie eine neue Funke DataFrame mit neuen Spalte Wert basiert auf der Spalte, in der ersten dataframe Java
Diese sollte einfach sein, aber....mit Spark 1.6.1....
Ich habe DataFrame #1 mit den Spalten A, B, C. Mit den Werten:
A B C
1 2 A
2 2 A
3 2 B
4 2 C
Ich dann erstellen Sie ein neues dataframe mit einer neuen Spalte D also:
DataFrame df2 = df1.withColumn("D", df1.col("C"));
so weit so gut, aber eigentlich möchte ich den Wert in Spalte D werden bedingte ie:
//pseudo code
if (col C = "A") the col D = "X"
else if (col C = "B") the col D = "Y"
else col D = "Z"
Werde ich dann drop column C und umbenennen D zu C. ich habe versucht, suchen in der Spalte Funktionen, aber nichts scheint zu passen die Rechnung; ich dachte, der Verwendung von df1.rdd().map() und die Iteration über die Zeilen, aber abgesehen von der nicht wirklich zu verwalten, um es zu arbeiten, ich dachte, dass der ganze Sinn des DataFrames war eine Abkehr von der RDD Abstraktion?
Leider habe ich dies in Java (und natürlich Spark mit Java ist nicht optimal!!!!). Wie es scheint, fehlt mir die offensichtliche und bin glücklich, es zu sein gezeigt zu sein ein idiot, wenn vorgestellt mit der Lösung!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie verwenden können
when
zu erreichen. Darüber hinaus können Sie wahrscheinlich ersetzen Sie die alte Spalte direkt. Für dein Beispiel würde der code so etwas wie:Weitere details über
when
, überprüfen Sie die dieSpalte
Javadoc.Dank Daniel habe ich dieses Problem gelöst 🙂
Das fehlende Stück war den statischen import der sql-Funktionen
Muss ich haben versucht, eine Millionen verschiedene Möglichkeiten der Verwendung, wenn Sie, bekam aber kompilieren Fehler/Laufzeitfehler, weil ich nicht importieren. Einmal importiert Daniels Antwort war vor Ort auf!
Können Sie auch die udf ' s zu tun die gleiche Arbeit. Schreiben Sie einfach eine einfache wenn-dann-sonst-Struktur