合并pyspark中的多个数据框

时间:2019-08-21 10:28:52

标签: apache-spark pyspark

我需要合并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),然后对这些联接进行帮助吗?

1 个答案:

答案 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")