【发布时间】:2019-01-18 09:05:43
【问题描述】:
我正在尝试在 Python 列表中执行数千个数据帧的数据帧联合。我正在使用我发现的两种方法。第一个使用for loop union,第二个使用functools.reduce。它们都适用于玩具示例,但是对于数千个数据帧,我正在试验严重的开销,这可能是由 JVM 之外的代码引起的,一次按顺序附加每个数据帧(使用两种合并方法)。
from functools import reduce # For Python 3.x
from pyspark.sql import DataFrame
# The reduce approach
def unionAll(dfs):
return reduce(DataFrame.unionAll, dfs)
df_list = [td2, td3, td4, td5, td6, td7, td8, td9, td10]
df = unionAll(df_list)
#The loop approach
df = df_list[0].union(df_list[1])
for d in df_list[2:]:
df = df.union(d)
问题是如何有效地执行这种多数据帧操作,可能会规避由一个接一个合并数据帧引起的开销。
非常感谢
【问题讨论】:
-
OP,请让我知道
pairwise_reduction对您的实际数据框有多大用处。 -
非常感谢@coldspeed,您的建议结果更快,但是内存超额仍然存在.. 对于大量 dfs,内存崩溃。你能帮帮我吗?
-
我建议设置一个检查点目录。见jaceklaskowski.gitbooks.io/mastering-apache-spark/…
标签: python dataframe pyspark apache-spark-sql