Несколько соединений с использованием PySpark - PullRequest
0 голосов
/ 28 марта 2019

Я пишу свой первый проект PySpark, и мне нужна небольшая помощь, пожалуйста.

Проект похож на это: у меня есть 10 различных источников данных, и я создал из каждого из них SQL-запрос кполучить структуру данных, которая выглядит следующим образом:

A - UserID, fieldA, fieldB
B - UserID, fieldC
C - UserID, fieldD, fieldE, fieldF
D - UserID, fieldG, fieldH
......

Мой вопрос заключается в том, как объединить все эти наборы данных (FULL OUTER), все на одном ключе - UserID, так что мой конечный результат будет выглядеть такthis:

UserID, fieldA, fieldB, fieldC, fieldD, .....

Комментарий: не все пользователи существуют во всех наборах данных!Существует вероятность того, что у A есть 5 пользователей, у B 100 пользователей, а у C 20 пользователей (которых ни в A, ни в B нет).

Не уверен, что это лучший / самый простой способ сделать это - либо с помощью SparkФункции SQL или spark.sql (SQL Query) - но любая помощь будет отличной!

Большое спасибо за продвинутый уровень.

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете просто написать несколько join s:

df_A.join(
    df_B,
    on="UserID",
    how="full"
).join(
    df_C,
    on="UserID",
    how="full"
).join( ... )

Если вы хотите, чтобы он был более компактным, вы могли бы сделать что-то вроде:

from functools import reduce

joined_df = reduce(
    lambda a, b: a.join(
            b,
            on="UserID",
            how="full"
        )
    ),
    [df_A, df_B, df_C .... ]
)
...