Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark for循环中的pyspark数据帧_Apache Spark_For Loop_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark for循环中的pyspark数据帧

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循环内的每次迭代中,这些变化都会反映在我的主数

我的情况如下。我有一个主数据帧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_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循环中代码的第四行?