【问题标题】:Fastest Way to search in Gigabytes of data?以千兆字节为单位搜索数据的最快方法?
【发布时间】:2017-04-06 03:42:58
【问题描述】:

我有一个大小为 8-12 GB 的 cvs 文件,我希望能够搜索文件的第一列并在匹配时检索整行。我想每次都搜索一组超过 100K 的键,并为它们检索相应的记录。

我可以选择几种方法:

1) 对文件中的每个键使用简单的 grep ==> 100K grep 命令

2) 创建一个基于 SQL 的数据库并索引第一列然后: a) 通过一个选择查询搜索每个键。 b)制作一个临时表并将所有键插入其中,然后设置成员资格

3) 做一个hash函数,比如Python字典,然后按键搜索。但是我每次需要做大量查询时都需要把它加载到内存中(我不希望它总是占用内存)

我不确定哪种方法更有效?或者我不知道的任何更好的选择。

【问题讨论】:

  • 几乎可以肯定,数据库或 nosql 密钥库是要走的路……也就是说这也几乎可以肯定是 OT :/
  • 索引数据库听起来是个好主意。
  • 你应该考虑使用 pyspark,它最适合此类操作

标签: python performance memory


【解决方案1】:

您可以读取使用 pandas 迭代的 csv 块。也许这个解决方案可以为你工作:How to read a 6 GB csv file with pandas

【讨论】:

    【解决方案2】:

    最快的解决方案(如果您有足够的 RAM)是 mmap 整个文件。

    当然可行的是一次读取一行文件:

    # keys is an iterable of keys.
    sep = ';' # The separator used in the CSV.
    with open('foo.csv') as f:
        for line in f:
            to = line.find(sep)
            if line[:to] in keys:
                # do something
    

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多