pyspark объединяет два ряда и выравнивает результаты - PullRequest
0 голосов
/ 15 октября 2018

Среда - pyspark, версия Spark 2.2.

У нас есть два числа test1 и test2, ниже приведены примеры данных

test1 = [('a', 20), ('b', 10), ('c', 2)]
test2 = [('a', 2), ('b', 3)]

Теперь мы хотим сгенерировать output1, как показано ниже, любая помощь приветствуется.

[('a', 20, 2), ('b', 10, 3)]

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете сделать это с помощью простого 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|
#+---+------+------+
...