apache-spark - 如何在pyspark中按列合并多个数据框?
问题描述
我有大约 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 + 日期列的合并表。
提前致谢。
解决方案
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|
+---+----------+-------+-------+-------+
推荐阅读
- javascript - 使用 vuejs 发送照片
- javascript - 请求我在其他地方创建的 json 文件时获取 API 错误
- asp.net-core - 如何通过 Polymer 在 Visual Studio ASP.NET Core 应用程序中使用 lit-element
- sympy - 在 sympy 中运行表达式的 AST
- docker - 在 docker 中启用 sshd 登录
- javascript - 捕获 webview 请求和响应
- reactjs - 在组件之间传递数据 react-rails
- jenkins - 从团队城市触发 Jenkins 工作并将报告发布到团队城市
- kotlin - 在没有类的 kotlin 文件中将@since 标签放在哪里?
- javascript - javascript中的数组和数据处理