Dataframe pyspark中的循环数据帧

Dataframe pyspark中的循环数据帧,dataframe,loops,apache-spark,pyspark,Dataframe,Loops,Apache Spark,Pyspark,我需要这段简单代码(pyspark)的帮助: 因此,我只尝试将列“stand”添加到列表中的所有(已经存在的)数据帧中。不幸的是,没有添加该列。奇怪的是,如果我在函数“ann”的末尾添加一个命令“print(table.columns)”,我会在那里看到新的列。但不是在实际的数据帧中 如果我只取一个数据帧并写入 akt_test=akt_test.withColumn('stand', lit('29Jan2020')) 一切正常。但不是在循环中。我不明白为什么以及如何才能治愈它。 提前感谢

我需要这段简单代码(pyspark)的帮助:

因此,我只尝试将列“stand”添加到列表中的所有(已经存在的)数据帧中。不幸的是,没有添加该列。奇怪的是,如果我在函数“ann”的末尾添加一个命令“print(table.columns)”,我会在那里看到新的列。但不是在实际的数据帧中

如果我只取一个数据帧并写入

 akt_test=akt_test.withColumn('stand', lit('29Jan2020'))
一切正常。但不是在循环中。我不明白为什么以及如何才能治愈它。
提前感谢您的想法。

函数必须返回修改后的数据帧。在函数中,仅修改了
变量的副本,而不是原始数据帧变量

此外,您还需要将该函数应用于列表元素(例如,使用下面的列表理解)。如果将其放在for循环中,列表元素将不会被修改。只修改列表元素的副本,然后在循环的下一次迭代中丢弃这些副本。例如,见

因此,要使代码正常工作,可以执行以下操作:

def ann(table):
    return table.withColumn('stand', lit('29Jan2020'))

df_list = [akt_test, b60_test, db71_test, pek6_test, db00f_test, d23b_test, bw0110_test]

df_list2 = [ann(df) for df in df_list]
如果要保留原始变量的值,可以这样做

akt_test, b60_test, db71_test, pek6_test, db00f_test, d23b_test, bw0110_test = [ann(df) for df in df_list]

谢谢!但是现在新的数据帧在第二个列表中。因此,如果我希望更改后的数据帧“akt_test”仍然具有名称“akt_test”,我必须编写“akt_test=df_list2[0]”等等。对我来说,这似乎不是一个理想的解决方案。我能更有效地完成吗?@Logic\u Problem\u 42查看编辑答案中的最后一段代码。
akt_test, b60_test, db71_test, pek6_test, db00f_test, d23b_test, bw0110_test = [ann(df) for df in df_list]