V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
goodboysisme
V2EX  ›  Python

关于 csv 大文件, Python 处理的问题

  •  
  •   goodboysisme · 2022-10-18 22:05:54 +08:00 · 3218 次点击
    这是一个创建于 750 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前有个关于一个近 10G 的 csv 文件关键词查询的的需求。 文件宽 80 长几千万吧,有各类数据。 使用了 pandas 分块处理,最后只弄成搜索一个关键词需要十几分钟。 大伙有什么只用 python 能更高效的建议吗?

    leimao
        1
    leimao  
       2022-10-18 22:08:51 +08:00 via iPhone   ❤️ 1
    试试 GPU 加速的 rapids
    abc612008
        2
    abc612008  
       2022-10-18 22:10:49 +08:00   ❤️ 1
    转 sqlite 再查?
    leimao
        3
    leimao  
       2022-10-18 22:11:15 +08:00 via iPhone   ❤️ 1
    另外 CSV 格式应该并不是高效的用于检索的格式,时间复杂度为 O(N)
    swulling
        4
    swulling  
       2022-10-18 22:12:23 +08:00 via iPhone   ❤️ 1
    转 sqlite 是很好的主意。
    dji38838c
        5
    dji38838c  
       2022-10-18 22:17:20 +08:00   ❤️ 1
    把数据导入 BigQuery
    用 Python 调 SQL 查询
    10G 的表,三十秒够了。
    goodboysisme
        6
    goodboysisme  
    OP
       2022-10-18 22:23:01 +08:00
    @dji38838c 搜索了下 BigQuery ,这是云端的吧。这个文档只能在本地断网机子上的,所以行不通
    r6cb
        7
    r6cb  
       2022-10-18 22:44:22 +08:00   ❤️ 1
    spark
    hefish
        8
    hefish  
       2022-10-18 22:46:13 +08:00
    我也觉着转 sqlite 的好,sqlite 不是云端吧?
    dlsflh
        9
    dlsflh  
       2022-10-18 22:59:20 +08:00 via Android
    有何加速 pandas 的库叫 modin 你看看有没有帮助。
    wxf666
        10
    wxf666  
       2022-10-18 23:07:38 +08:00   ❤️ 1
    转 sqlite 后,用 sqlite 的 FTS5 全文搜索,能满足需求吗?

    ( Trigram 分词器支持 3 字及以上的 LIKE '%关键词%' 搜索。
    或者,有个号称参考微信 sqlite 优化原理写的 simple 开源分词器,也支持中文分词?)
    FYFX
        11
    FYFX  
       2022-10-18 23:08:32 +08:00
    你这主要是查询吧,找个数据库吧
    goodboysisme
        12
    goodboysisme  
    OP
       2022-10-18 23:16:05 +08:00 via iPhone
    @abc612008
    @hefish
    @wxf666
    @swulling 谢谢了,过几天周末再试试这个方案
    freefcw
        13
    freefcw  
       2022-10-19 00:07:47 +08:00
    还是没搞懂楼主的需求到底是什么,输入是什么,什么一个处理逻辑,输出是什么....
    dayeye2006199
        14
    dayeye2006199  
       2022-10-19 01:26:17 +08:00 via Android
    弄个本地的数据库,把数据搞里面。
    根据查阅条件研究一下,应该对什么字段做索引比较好。

    这么大的 CSV 文件,python 光读到内存里要花的时间就很客观吧。
    HankLu
        15
    HankLu  
       2022-10-19 04:22:37 +08:00
    社工?
    helloworld000
        16
    helloworld000  
       2022-10-19 04:47:32 +08:00
    lz 除了 python ,还知道有个东西叫做数据库吗?
    suguo210
        17
    suguo210  
       2022-10-19 04:54:36 +08:00
    wtks1
        18
    wtks1  
       2022-10-19 08:10:04 +08:00 via Android
    直接塞进 sqlite 里,然后用 sql 语句查询
    ETiV
        19
    ETiV  
       2022-10-19 09:36:11 +08:00
    不如说说你的具体需求,毕竟直接 load 一个 10GB 的文件进各种本地的、远程的数据库都需要很久的时间。

    比如,你提到的「关键词查询」:如果这个查询只跑个 1 、2 次,可以考虑下先 grep ,筛选出能够命中这些关键词的文件内容,再使用这个结果文件处理?

    当然如果你这一个 10GB 的文件,需要一直反复的查询,导进数据库里还是最方便的…
    ytmsdy
        20
    ytmsdy  
       2022-10-19 10:28:23 +08:00
    先干到数据库里面去吧。
    someonedeng
        21
    someonedeng  
       2022-10-19 10:48:01 +08:00
    放数据库里
    mmm159357456
        22
    mmm159357456  
       2022-10-19 10:55:48 +08:00
    如果一定要用 pandas ,那么可以考虑加 dask ,再用 map 系列函数多核加速
    PeterD
        23
    PeterD  
       2022-10-19 11:17:40 +08:00   ❤️ 1
    可以试试 rg + xsv
    BJL
        24
    BJL  
       2022-10-19 14:08:25 +08:00
    赞同楼上,如果只是一次性查询,rg 非常的好用
    xuelu520
        25
    xuelu520  
       2022-10-19 16:51:00 +08:00
    楼上既然说到了数据库,要不考虑下 ES ?几千万数据写 ES ,查询都是秒秒钟呀。
    goodboysisme
        26
    goodboysisme  
    OP
       2022-10-19 18:19:36 +08:00
    @dayeye2006199
    @ETiV
    遍历一次 6-8 分钟左右,只是临时用的而已。看网上一些文章使用 pandas 速度比我的快几百倍心里过不去而已...
    goodboysisme
        27
    goodboysisme  
    OP
       2022-10-19 18:35:23 +08:00
    @mmm159357456 我 6 个核都拉到百分之 80 左右了,dask 这个的确没有用过
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3341 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.