如何在pyspark中按列合并多个数据框?

Posted

技术标签:

【中文标题】如何在pyspark中按列合并多个数据框?【英文标题】:How to merge several dataframes column-wise in pyspark? 【发布时间】:2019-01-07 18:49:23 【问题描述】:

我有大约 25 个表,每个表有 3 列(id、date、value),我需要通过加入 id 和 date 列从每个表中选择 value 列并创建一个合并表。

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】:
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|
+---+----------+-------+-------+-------+

【讨论】:

以上是关于如何在pyspark中按列合并多个数据框?的主要内容,如果未能解决你的问题,请参考以下文章

当 ID 匹配时,在其他 Pyspark 数据帧中按列划分 Pyspark 数据帧列

如何按列对pyspark中的数据框进行分组并以该列作为键并以记录列表作为其值来获取字典?

使用 NaN 在 pandas 中按列对数据进行 Winsorizing

如何按列绘制数据框的多个字典?蟒蛇熊猫

如何在pyspark中按字母顺序对嵌套结构的列进行排序?

合并数据框时按列分组