2017-04-13 5 views
0

ich eine neue Operation auf Spark-SQL hinzufügen möchten, habe ich bereits benutzerdefinierte Funktion der Formhinzufügen Funken benutzerdefinierte Operationen SQL

dataframe.filter(udf("$a", "$b")) 

Ich brauche verwendet eine ähnliche Funktion hinzuzufügen, sondern arbeitet auf zwei Datenrahmen, für Beispiel Hinzufügen einer Funktion wie:

dataframe1.udf(dataframe2)) 

Um genauer zu sein, ist die Funktion eine optimierte Verknüpfung auf zwei Datenrahmen.

Der eigentliche Code ist

CustomJoin(dataframe1,dataframe2) 

ist dies möglich mit benutzerdefinierten Funktionen? Irgendwelche anderen Lösungen oder Beispiele?

+0

kann Sie sind genauer, was Sie genau machen wollen? – mtoto

+0

Offenbar, den Link zu lesen. das ist nicht möglich. Ich möchte einen benutzerdefinierten Join schreiben. Tatsächlich funktioniert der Code wie folgt: 'CustomJoin (df1, df2)'. Mein Ziel ist es, es so zu ändern 'df1.CustomJoin (df2)' – syl

+0

Können Sie bitte Beispieldaten, Code und erwartete Ausgabe liefern? Ab jetzt ist deine Frage noch zu weit gefasst. – mtoto

Antwort

0

Sie können für diesen implizit verwenden:

class AugmentedDataFrame(val df: DataFrame) { 
    def CustomJoin(df2: Dataframe){ ......} 
} 

object DataFrameImplicits { 
    implicit def dfToAugmentedDataFrame(df: DataFrame) = new AugmentedDataFrame(df) 
} 

und dann:

import DataFrameImplicits._ 
df.CustomJoin(df2) 

mehr zu erfahren, wie implizit mit einer benutzerdefinierten Methode zu einer vorhandenen Klasse hinzuzufügen: Add Your Own Methods to the String Class

+0

Können Sie mehr Ihre Lösung erklären? warum muss ich in diesem Fall implicits verwenden. – syl

+0

Ich habe einen Link hinzugefügt, um mehr über die Verwendung von implizit in Ihrem Fall zu erfahren – Mehrez

+0

Sie Antwort funktioniert einwandfrei. Weißt du, ob es eine Möglichkeit gibt, dies zu erweitern, indem ich 'Select * von t1 CustomJoin t2' verwende? – syl

Verwandte Themen