2015-11-16 16 views
7

Używam Spark 1.3 i chciałby dołączyć na wielu kolumnach wykorzystujących interfejs Pythona (SparkSQL)SparkSQL dołączyć na stwardnienie kolumnie

następujące prace:

ja najpierw zarejestrować je w tabelach tymczasowych.

numeric.registerTempTable("numeric") 
Ref.registerTempTable("Ref") 

test = numeric.join(Ref, numeric.ID == Ref.ID, joinType='inner') 

Chciałbym teraz dołączyć do nich na podstawie wielu kolumn.

uzyskać SyntaxError: nieprawidłową składnię z tym:

test = numeric.join(Ref, 
    numeric.ID == Ref.ID AND numeric.TYPE == Ref.TYPE AND 
    numeric.STATUS == Ref.STATUS , joinType='inner') 

Odpowiedz

16

Należy użyć &/| operatorów i być ostrożnym pierwszeństwa operatora:

df1 = sqlContext.createDataFrame(
    [(1, "a", 2.0), (2, "b", 3.0), (3, "c", 3.0)], 
    ("x1", "x2", "x3")) 

df2 = sqlContext.createDataFrame(
    [(1, "f", -1.0), (2, "b", 0.0)], ("x1", "x2", "x3")) 

df = df1.join(df2, (df1.x1 == df2.x1) & (df1.x2 == df2.x2)) 
df.show() 

## +---+---+---+---+---+---+ 
## | x1| x2| x3| x1| x2| x3| 
## +---+---+---+---+---+---+ 
## | 2| b|3.0| 2| b|0.0| 
## +---+---+---+---+---+---+