我有一个由大量数据帧组成的字典,我打算把它们全部联合起来存储在dbfs中,我尝试了以下方法。
***df = sqlContext.createDataFrame([],schema)
for i in dict.keys():
df = df.union(dict[i])***
这要花很多时间来执行! 有没有一种有效的方法来合并它们?我假设我是去((((a+b)+c)+d)+e)......这就是为什么更多的时间。
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。