1. ホーム
  2. python

[解決済み] Pysparkで複数の列で結合する方法は?

2022-03-04 09:02:38

質問

Spark 1.3を使用しており、Pythonインターフェース(SparkSQL)を使用して複数のカラムで結合したい。

以下のように動作します。

まず、tempテーブルとして登録します。

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

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

今度は、複数のカラムに基づいて結合したいと思います。

私は SyntaxError : これは無効な構文です。

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

解決方法は?

を使用する必要があります。 & / | 演算子には注意が必要で 演算子の優先順位 ( == はビット単位よりも優先順位が低く ANDOR ):

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|
## +---+---+---+---+---+---+