Apache spark for循环中的pyspark数据帧
我的情况如下。我有一个主数据帧DF1。我在for循环中处理以反映更改,我的伪代码如下所示Apache spark for循环中的pyspark数据帧,apache-spark,for-loop,pyspark,apache-spark-sql,Apache Spark,For Loop,Pyspark,Apache Spark Sql,我的情况如下。我有一个主数据帧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循环内的每次迭代中,这些变化都会反映在我的主数
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_uuuu的评论所建议的,您需要在for循环的末尾添加另一行
DF1=df_final
,以确保在每次迭代中更新DF1
另一种方法是使用reduce
一次合并所有联接。e、 g
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')
除非您在现在的第三次之后有了
df1=df_final
,否则您将在每次迭代中创建df_final
,并且您将只在loopOK结束时获得最新结果。我是否应该将df1=df_final
添加为for循环中代码的第四行?