我需要合并20个数据帧,每个数据帧具有数千到一百万条记录。
每个数据框都有2列:
df1:
root
|-- id: string (nullable = true)
|-- col1: string (nullable = true)
df2:
root
|-- id: string (nullable = true)
|-- col2: string (nullable = true)
最终df:
root
|-- id: string (nullable = true)
|-- col1: string (nullable = true)
|-- col1: string (nullable = true)
.
.
|-- col19: string (nullable = true)
我尝试过
df = df1
.join(df2, 'ID', 'full') \
.join(df3, 'ID', 'full') \
.join(df4, 'ID', 'full') \
.join(df5, 'ID', 'full')
.
.
.
.join(df19, 'ID', 'full')
它在30-40分钟后失败,并显示没有剩余内存错误。尝试使用具有8 GB内存的4-16个执行程序。
数据框中存在重复的ID。所以它的连接变得更糟。
还有其他方法可以对这些数据帧执行合并吗?
在加入帮助之前会对重复项进行排序和删除吗?
加入顺序是否也像首先保持高记录df一样重要?
将20个联接拆分为多个联接(例如5个批)并对其执行操作(例如count),然后对这些联接进行帮助吗?
答案 0 :(得分:0)
如果规范化df列名该怎么办
df1
root
|-- id: string (nullable = true)
|-- **col1**: string (nullable = true)
df2
root
|-- id: string (nullable = true)
|-- **col1**: string (nullable = true)
然后您可以合并
df1.union(df2).dropDuplicates(subset="id")