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 · 107 天前 · 2521 次点击
    这是一个创建于 107 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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