sha*_*pan 3 python csv optimization data-structures
我正在尝试处理一个大约有73亿行的CSV文件,
我将已处理的行存储到python collections.defaultdict中,其中字符串为键,元组为值,但是将此数据结构存储到字典中需要大约100秒存储50K行.
我正在以50K行的块处理CSV文件,以确保系统不会耗尽内存或避免磁盘溢出I/O交换操作.
稍后我将这些处理过的CSV文件加载到表中并进行FULL OUTER JOIN以获得组合结果.
CSV ID的示例ROW,值:
"10203","http://google.com/goo.gl?key='universe'&value='somedata'"
Run Code Online (Sandbox Code Playgroud)
数据结构:
dt = {'goog': [(10203, 1), ...}
Run Code Online (Sandbox Code Playgroud)
基本上我正在尝试实现全文搜索功能的算法 - 为此我需要保持4个字符的部分值及其关联ID的位置.
以下是一些想到的事情 -
n
较小的文件.启动一个主进程,该进程分叉n
子进程并行处理这n个块文件.那样在100秒内您理论上会n * 50,000
处理行.请注意,我在说"理论上",因为如果所有这些都发生在单个硬盘上,则硬盘可能无法同时传输数据.因此,在满足并发请求时可能存在延迟(但是,在现代操作系统上运行的I/O算法再次缓存正在读取的文件的一部分,这可能使您接近上述数字).x machines
每个人y harddisks
.制作x*y chunks
文件并将它们放入这些机器中.并运行您的处理程序.所以你x*y*50000 rows
在相同的100秒内处理.吞吐量随着所使用的机器和硬盘的数量而增加.您可能不得不处理分布式计算的一些新问题(如可用性,容错等),但仍然......第2,3和4点的前提是假设CSV文件中的每一行都可以独立处理,并且行之间没有依赖关系.
归档时间: |
|
查看次数: |
861 次 |
最近记录: |