Вы можете сделать это с помощью простого join
с последующим вызовом map
для выравнивания значений.
test1.join(test2).map(lambda (key, values): (key,) + values).collect()
#[('a', 20, 2), ('b', 10, 3)]
Для объяснения, результат join
- этоследующее:
test1.join(test2).collect()
#[('a', (20, 2)), ('b', (10, 3))]
Это почти желаемый результат, но вы хотите сгладить результаты.Мы можем сделать это, вызвав map
и вернув новый tuple
с желаемым форматом.Синтаксис (key,)
создаст одноэлементный кортеж только с ключом, который мы добавляем к значениям.
Вы также можете использовать API DataFrame, используя pyspark.sql.DataFrame.toDF()
для преобразованияваши RDD в DataFrames:
test1.toDF(["key", "value1"]).join(test2.toDF(["key", "value2"]), on="key").show()
#+---+------+------+
#|key|value1|value2|
#+---+------+------+
#| b| 10| 3|
#| a| 20| 2|
#+---+------+------+