В PySpark, как я могу заполнить новый столбец на основе поиска в другом DataFrame? - PullRequest
0 голосов
/ 18 июня 2019

Впервые в Spark и PySpark я пытаюсь добавить поле / столбец в DataFrame путем поиска информации в другом DataFrame. Я провел последние несколько часов, пытаясь читать RDD, DataFrames, DataSet, карты, объединения и т. Д., Но все эти концепции для меня все еще новы, и мне все еще трудно разобраться в этом.

Так, например, учитывая следующий входной DataFrame с идентификаторами и ролями:

+----+-------------+
| ID | Role        |
+----+-------------+
|  1 | Author      |
|  1 | Editor      |
|  2 | Author      |
|  2 | Publisher   |
|  3 | Editor      |
|  3 | Assistant   |
+----+-------------+

И еще один входной DataFrame с уникальным отображением идентификаторов и имен:

+----+-------------+
| ID | Name        |
+----+-------------+
|  1 | John Smith  |
|  2 | John Doe    |
|  3 | Bob Jim Bob |
+----+-------------+

Мне нужно как-то объединить эти данные в один выходной DataFrame со столбцом Name, добавленным так:

+----+-------------+-------------+
| ID | Name        | Role        |
+----+-------------+-------------+
|  1 | John Smith  | Author      |
|  1 | John Smith  | Editor      |
|  2 | John Doe    | Author      |
|  2 | John Doe    | Publisher   |
|  3 | Bob Jim Bob | Editor      |
|  3 | Bob Jim Bob | Assistant   |
+----+-------------+-------------+

Фактический объем данных составляет порядка 200k + строк для обеих входных таблиц.

Вначале я думал добавить новый столбец Имя в таблицу ID + Role, а затем выполнить итерацию по каждой строке и вручную найти имя из таблицы ID + Имя, но это очень медленно, и я уверен, что не сможет извлечь выгоду из сильные стороны Spark.

Опять же, все еще новичок во всем этом, поэтому, пожалуйста, прости меня, если это действительно очевидный вопрос.

Спасибо!

1 Ответ

1 голос
/ 18 июня 2019

Вы можете объединить оба кадра данных, как показано ниже в pySpark:

>>> df1.show()
+---+---------+
| ID|     Role|
+---+---------+
|  1|   Author|
|  1|   Editor|
|  2|   Author|
|  2|Publisher|
|  3|   Editor|
|  3|Assistant|
+---+---------+

>>> df2.show()
+---+-----------+
| ID|       Name|
+---+-----------+
|  1| John Smith|
|  2|   John Doe|
|  3|Bob Jim Bob|
+---+-----------+

>>> df3 = df2.join(df1,"ID")
>>> df3.show()
+---+-----------+---------+
| ID|       Name|     Role|
+---+-----------+---------+
|  1| John Smith|   Author|
|  1| John Smith|   Editor|
|  2|   John Doe|   Author|
|  2|   John Doe|Publisher|
|  3|Bob Jim Bob|   Editor|
|  3|Bob Jim Bob|Assistant|
+---+-----------+---------+

Примечание: я предполагаю "ID" в качестве внешнего ключа. Пожалуйста, дайте комментарий в случае любые проблемы.

...