Как объединить несколько фреймов данных по столбцам в pyspark? - PullRequest
0 голосов
/ 07 января 2019

У меня есть около 25 таблиц, и у каждой таблицы есть 3 столбца (идентификатор, дата, значение), где мне нужно было бы выбрать столбец значения из каждого из них, объединившись с столбцом идентификатора и даты и создать объединенную таблицу.

df_1 = df_1.join(
    df_2, 
    on=(df_1.id == df_2.id) & (df_1.date == df_2.date),
    how="inner"
).select([df_1["*"], df_2["value1"]]).dropDuplicates()

Есть ли в pyspark какой-либо оптимизированный способ создания этой объединенной таблицы, содержащей эти 25 значений + id + столбец даты.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 января 2019
df_1 = spark.createDataFrame([[1, '2018-10-10', 3]], ['id', 'date', 'value'])
df_2 = spark.createDataFrame([[1, '2018-10-10', 3], [2, '2018-10-10', 4]], ['id', 'date', 'value'])
df_3 = spark.createDataFrame([[1, '2018-10-10', 3], [2, '2018-10-10', 4]], ['id', 'date', 'value'])

from functools import reduce

# list of data frames / tables
dfs = [df_1, df_2, df_3]

# rename value column
dfs_renamed = [df.selectExpr('id', 'date', f'value as value_{i}') for i, df in enumerate(dfs)]

# reduce the list of data frames with inner join
reduce(lambda x, y: x.join(y, ['id', 'date'], how='inner'), dfs_renamed).show()
+---+----------+-------+-------+-------+
| id|      date|value_0|value_1|value_2|
+---+----------+-------+-------+-------+
|  1|2018-10-10|      3|      3|      3|
+---+----------+-------+-------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...