Übergeben einer Datenrahmenspalte und einer externen Liste an udf unter withColumn

8

Ich habe einen Spark-Datenrahmen mit folgender Struktur. Das bodyText_token hat die Tokens (verarbeitete Wörter). Und ich habe eine verschachtelte Liste von definierten Schlüsselwörtern

%Vor%

Ich musste überprüfen, wie viele Tokens unter die einzelnen Keyword-Listen fallen, und das Ergebnis als neue Spalte des vorhandenen Datenrahmens hinzufügen. ZB: wenn tokens =["become", "farmer","rally","workers","student"] das Ergebnis wird - & gt; [1,2,0]

Die folgende Funktion funktionierte wie erwartet.

%Vor%

Ich habe udf unter withColumn benutzt, um auf die Funktion zuzugreifen und erhalte einen Fehler. Ich denke, es geht darum, eine externe Liste an ein udf zu übergeben. Gibt es eine Möglichkeit, die externe Liste und die datafram-Spalte an ein udf weiterzuleiten und meinem Dataframe eine neue Spalte hinzuzufügen?

%Vor%     
Jay 24.05.2016, 09:42
quelle

2 Antworten

20

Die sauberste Lösung besteht darin, zusätzliche Argumente mit closement zu übergeben:

%Vor%

Dies erfordert keine Änderungen in keyword_list oder der Funktion, die Sie mit UDF umbrechen. Sie können diese Methode auch verwenden, um ein beliebiges Objekt zu übergeben. Dies kann verwendet werden, um beispielsweise eine Liste von sets für effiziente Suchvorgänge zu übergeben.

Wenn Sie Ihre aktuelle UDF verwenden und topic_words direkt übergeben möchten, müssen Sie sie zuerst in ein Spaltenliteral konvertieren:

%Vor%

Je nach Ihren Daten und Anforderungen gibt es alternative, effizientere Lösungen, die keine UDFs (explode + aggregate + collapse) oder Lookups (Hashing + Vektoroperationen) erfordern.

    
zero323 25.05.2016, 04:57
quelle
7

Das Folgende funktioniert gut, wo jeder externe Parameter an die UDF übergeben werden kann (ein angepasster Code, der jedem hilft)

%Vor%     
Jay 26.05.2016 03:20
quelle