gpt4 book ai didi

python - 如何将巨大的 CSV 文件处理成 python?

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:53 25 4
gpt4 key购买 nike

我正在尝试处理一个包含 ~730 亿行的 CSV 文件,
我将处理后的行存储到 python collections.defaultdict 中,将字符串作为键,将元组作为值,但是将此数据结构存储到字典中需要大约 100 秒来存储 50K 行。

我正在处理 50K 行的 block 中的 CSV 文件,以确保系统不会内存不足或避免磁盘溢出 I/O 交换操作。

稍后我将这些处理后的 CSV 文件加载到表中并进行 FULL OUTER JOIN 以获得组合结果。

CSV ID 的行示例,值:

"10203","http://google.com/goo.gl?key='universe'&value='somedata'"

数据结构:

dt = {'goog': [(10203, 1), ...}

基本上,我正在尝试为全文搜索功能实现一种算法 - 为此,我需要维护 4 个字符的部分值及其关联 ID。

最佳答案

下面是我想到的一些事情 -

  1. 正如@Burhad 所建议的,为什么不能将此文件直接加载到数据库中?像您所做的任何类型的字符串处理都可以在像 MySQL 这样的常规 RDBMS 中完成。他们有你知道的字符串函数。一个简单的数据库例程可以在数据库本身内完成这一切,甚至无需首先将数据写入文件。
  2. 如果您不想采用上述方法。我建议你试试这个。将文件拆分成比方说 n 更小的文件。启动一个主进程,它派生 n 个子进程来并行处理这 n 个 block 文件。这样,理论上您将在 100 秒内处理 n * 50,000 行。请注意,我说的是“理论上”,因为如果所有这些都发生在单个硬盘上,则该硬盘可能不会同时传输数据。因此,在满足并发请求方面可能会有延迟(但在现代操作系统上运行的 I/O 算法再次缓存正在读取的文件的一部分,这可能会让您接近上述数字)。
  3. 上述方法的扩展是在同一台本地机器上使用多个硬盘,它们都属于同一 raid 级别。
  4. 如果您需要更高的吞吐量,请考虑分布式计算。比如 x 台机器,每台机器有 y 个硬盘。为您的文件创建 x*y block 并将它们放入这些机器中。并运行你的处理程序。因此,您在同样的 100 秒内处理了 x*y*50000 行。吞吐量随着使用的机器和硬盘数量的增加而增加。您可能不得不处理分布式计算的一些新问题(如可用性、容错等),但仍然...

第 2、3 和 4 点假设 CSV 文件中的每一行都可以独立处理,并且行之间没有依赖关系。

关于python - 如何将巨大的 CSV 文件处理成 python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com