for循环内的pyspark数据框架



我有一个情况如下。我有一个主数据帧DF1。我在for循环中进行处理以反映更改,我的伪代码如下:

for Year in [2019, 2020]:
query_west = query_{Year}
df_west = spark.sql(query_west)
df_final = DF1.join(df_west, on['ID'], how='left')

在这种情况下,df_final正在与查询连接并在每次迭代中更新,对吗?我希望在for循环内的每次迭代中,变化都反映在主数据框架DF1上。

请告诉我我的逻辑是否正确。谢谢。

正如@venky__的评论所建议的那样,您需要在for循环的末尾添加另一行DF1 = df_final,以确保DF1在每次迭代中都得到更新。

另一种方法是使用reduce一次性将所有连接组合起来。例如

from functools import reduce
dfs = [DF1]
for Year in [2019, 2020]:
query_west = f'query_{Year}'
df_west = spark.sql(query_west)
dfs.append(df_west)
df_final = reduce(lambda x, y: x.join(y, 'ID', 'left'), dfs)

相当于

df_final = DF1.join(spark.sql('query_2019'), 'ID', 'left').join(spark.sql('query_2020'), 'ID', 'left')

相关内容

  • 没有找到相关文章

最新更新