在python中组合一个巨大的csv文件

时间:2017-12-19 09:52:35

标签: python pandas csv mapreduce dask

我有一个巨大的.csv文件(100 GB以上),格式为:

| Column1 | Column2 | Column3 | Column4 | Column5             | 
|---------|---------|---------|---------|---------------------| 
| A       | B       | 35      | X       | 2017-12-19 11:28:34 | 
| A       | C       | 22      | Z       | 2017-12-19 11:27:24 | 
| A       | B       | 678     | Y       | 2017-12-19 11:38:36 | 
| C       | A       | 93      | X       | 2017-12-19 11:44:42 | 

想要总结一下

  • 由Column1和Column2中的唯一值
  • 组成
  • 与sum(Column3),
  • MAX(Column5)
  • Column4的值,其中Column5处于最大值。

因此上述提取物应成为:

| Column1 | Column2 | sum(Column3) | Column4 | max(Column5)        | 
|---------|---------|--------------|---------|---------------------| 
| A       | B       | 702          | Y       | 2017-12-19 11:38:36 | 
| A       | C       | 22           | Z       | 2017-12-19 11:27:24 | 
| C       | A       | 93           | X       | 2017-12-19 11:44:42 |

考虑以下这些因素:

  • .csv未排序
  • 我在windows下有python
  • 解决方案应该在独立的PC上(不接受云实例)
  • 我尝试过Dask和.compute()步骤(它应该完成)大约需要一周时间。比这更快的任何东西都是一个很好的解决方案。
  • 我对各种解决方案持开放态度 - 将文件分成多块,多处理......无论什么都可行

编辑1: 我没有在dask中使用多处理。添加它可以显着提高速度(正如其中一条评论所建议的那样),但32G RAM还不足以完成这种方法。 编辑2: Dask 0.16.0不是一个可能的解决方案,因为它绝对是破碎的。将分区写入磁盘5个小时后,它已经写入了300个分区中的8个,并且在报告写入7之后,现在它报告写了4个而不是8个(没有抛出错误)。

0 个答案:

没有答案