我有大约10,000个不同的Spark数据帧,需要使用union
进行合并,但是union
花费的时间很长。
下面是我运行的代码的简要示例,dfs是我想在以下位置使用union
的数据框的集合:
from functools import reduce
from pyspark.sql import DataFrame
dfOut = reduce(DataFrame.unionAll, dfs)
似乎当我合并100-200个数据帧时,它的速度相当快。但是,当我增加要合并的数据帧的数量时,运行时间将成倍增加。
对提高效率有何建议?非常感谢!
答案 0 :(得分:2)
有关此问题的详细信息,请访问https://issues.apache.org/jira/browse/SPARK-12616。
联盟逻辑计划是一个二进制节点。但是,一个典型的用例 union是将大量输入源(DataFrames, RDD或文件)。联合成千上万的人并不少见 文件。在这种情况下,由于 大量的逻辑联合。我们应该改变联盟的逻辑 计划支持任意数量的孩子,并添加一条规则 在优化器(或分析器?)中将所有相邻的并集折叠成 一个。
请注意,此问题在物理计划中不存在,因为 物理联盟已经支持了任意数量的孩子。
此问题在2.0.0版中已修复。如果必须使用低于2.0.0的版本,请使用RDD的合并函数合并数据。