合并多个Spark数据帧

时间:2019-08-20 03:43:06

标签: python apache-spark pyspark apache-spark-sql pyspark-sql

我有大约10,000个不同的Spark数据帧,需要使用union进行合并,但是union花费的时间很长。

下面是我运行的代码的简要示例,dfs是我想在以下位置使用union的数据框的集合:

from functools import reduce
from pyspark.sql import DataFrame

dfOut = reduce(DataFrame.unionAll, dfs)

似乎当我合并100-200个数据帧时,它的速度相当快。但是,当我增加要合并的数据帧的数量时,运行时间将成倍增加。

对提高效率有何建议?非常感谢!

1 个答案:

答案 0 :(得分:2)

有关此问题的详细信息,请访问https://issues.apache.org/jira/browse/SPARK-12616

  

联盟逻辑计划是一个二进制节点。但是,一个典型的用例   union是将大量输入源(DataFrames,   RDD或文件)。联合成千上万的人并不少见   文件。在这种情况下,由于   大量的逻辑联合。我们应该改变联盟的逻辑   计划支持任意数量的孩子,并添加一条规则   在优化器(或分析器?)中将所有相邻的并集折叠成   一个。

     

请注意,此问题在物理计划中不存在,因为   物理联盟已经支持了任意数量的孩子。

此问题在2.0.0版中已修复。如果必须使用低于2.0.0的版本,请使用RDD的合并函数合并数据。