在pyspark中有效地添加大量数据帧。

问题描述 投票:0回答:1

我有一个由大量数据帧组成的字典,我打算把它们全部联合起来存储在dbfs中,我尝试了以下方法。

***df = sqlContext.createDataFrame([],schema)
for i in dict.keys():
  df = df.union(dict[i])***

这要花很多时间来执行! 有没有一种有效的方法来合并它们?我假设我是去((((a+b)+c)+d)+e)......这就是为什么更多的时间。

python scala pyspark apache-spark-sql databricks
1个回答
0
投票

DataFrames只能一个一个的合并,但是你可以在rdd-s上做一个union,然后把最后一个转换回dataframe。

def unionAll(dict, schema):
    dfs = dict.values()
    firstDf = dfs[0]
    return firstDf.sql_ctx.createDataFrame(
        firstDf.sql_ctx._sc.union([df.rdd for df in dfs]),
        schema
    )

根据 http:/apache-spark-developers-list.1001551.n3.nabble.comrepeated-union-of-dataframes-take-worse than-O-N-2-time-td20394.html#a20408。你应该会得到一些速度上的提升,因为Spark不会每次都通过分析阶段来分析之前的df-s。

© www.soinside.com 2019 - 2024. All rights reserved.