Wie kann ich zusätzliche Parameter an UDFs in SparkSql übergeben?

8

Ich möchte die Datumsspalten in DataFrame analysieren, und für jede Datumsspalte kann sich die Auflösung für das Datum ändern (z. B. 2011/01/10 = & gt; 2011/01, wenn die Auflösung auf "Monat" eingestellt ist ").

Ich habe den folgenden Code geschrieben:

%Vor%

Aber es funktioniert nicht. Es scheint, dass ich Column s nur an UDFs übergeben kann. Und ich frage mich, ob es sehr langsam wird, wenn ich DataFrame in RDD umwandle und die Funktion auf jede Zeile anwende.

Kennt jemand die richtige Lösung? Vielen Dank!

    
DarkZero 22.02.2016, 05:47
quelle

2 Antworten

26

Benutze ein bisschen Curry:

%Vor%

und benutze es wie folgt:

%Vor%

Als Randnotiz sollten Sie sich sql.functions.trunc und sql.functions.date_format ansehen. Diese sollten mindestens einen Teil der Arbeit ohne UDFs überhaupt ausführen.

Hinweis :

In Spark 2.2 oder höher können Sie typedLit function:

verwenden %Vor%

die einen größeren Bereich von Literalen wie Seq oder Map unterstützen.

    
zero323 22.02.2016, 11:12
quelle
10

Sie können ein Literal Column erstellen, das mit der Funktion lit(...) in org.apache.spark.sql.functions

an ein udf übergeben wird

Zum Beispiel:

%Vor%     
Michael Armbrust 24.02.2016 18:31
quelle