我有一个字典,基本上看起来像:
dct = {'a':{'df':dfa, 'group':1, 'att':col1},
'b': {'df':dfb, 'group':2, 'att':col2},
'c': {'df':dfc, 'group':3, 'att':col3},
}
我的字典要长得多,这就是为什么我希望以一种比现在更有效的方式联合所有的数据帧:
df = dct['a']['df'].union(dct['b']['df']).union(dct['c']['df'])....etc.
try this:
from functools import reduce
from pyspark.sql import DataFrame
output = reduce(DataFrame.unionAll, [dct[key]['df'] for key in dct.keys()])
您可以使用union()
或unionByName(),如果指定allowMissingColumns=True
,它具有将数据帧与不同列组合在一起的优点。如果您不想在字典中保留重复的数据帧,您可能还需要在末尾添加distinct()
:
df = dct['a']['df']
for k in list(dct.keys())[1:]:
df = df.unionByName(dct[k]['df'], allowMissingColumns=True)
df = df.distinct()