我需要以下简单代码段(pyspark)的帮助:
def ann(table):
table=table.withColumn('stand', lit('29Jan2020'))
for table in [akt_test, b60_test, db71_test, pek6_test, db00f_test, d23b_test, bw0110_test]:
ann(table)
因此,我仅尝试将列“ stand”添加到列表中的所有(已经存在的)数据帧中。不幸的是,没有添加该列。奇怪的是,如果我在函数“ ann”的末尾添加命令“ print(table.columns)”,则会在此处看到新列。但不在实际数据帧中。
如果我只是拿一个数据帧并写
akt_test=akt_test.withColumn('stand', lit('29Jan2020'))
一切正常。但是不是一个循环。我不明白为什么以及如何可以治愈它。预先感谢您的想法。
该函数必须返回修改后的数据帧。在您的函数中,仅table
修改了变量的副本,而不修改原始的dataframe变量。
另外,您需要将该函数应用于列表元素(例如,使用下面的列表理解)。如果将其放在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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句