关于 csv 大文件, Python 处理的问题 - V2EX
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 日 3857 次点击
    这是一个创建于 1204 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    当然如果你这一个 10GB 的文件,需要一直反复的查询,导进数据库里还是最方便的…
    ytmsdy
        20
    ytmsdy  
       2022 年 10 月 19 日
    先干到数据库里面去吧。
    someonedeng
        21
    someonedeng  
       2022 年 10 月 19 日
    放数据库里
    MasterofNone
        22
    MasterofNone  
       2022 年 10 月 19 日
    如果一定要用 pandas ,那么可以考虑加 dask ,再用 map 系列函数多核加速
    PeterD
        23
    PeterD  
       2022 年 10 月 19 日   1
    可以试试 rg + xsv
    BJL
        24
    BJL  
       2022 年 10 月 19 日
    赞同楼上,如果只是一次性查询,rg 非常的好用
    xuelu520
        25
    xuelu520  
       2022 年 10 月 19 日
    楼上既然说到了数据库,要不考虑下 ES ?几千万数据写 ES ,查询都是秒秒钟呀。
    goodboysisme
        26
    goodboysisme  
    OP
       2022 年 10 月 9 日
    @dayeye2006199
    @ETiV
    遍历一次 6-8 分钟左右,只是临时用的而已。看网上一些文章使用 pandas 速度比我的快几百倍心里过不去而已...
    goodboysisme
        27
    goodboysisme  
    OP
       2022 年 10 月 19 日
    @mmm159357456 我 6 个核都拉到百分之 80 左右了,dask 这个的确没有用过
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2543 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 11:02 PVG 19:02 LAX 03:02 JFK 06:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86