
之前有个关于一个近 10G 的 csv 文件关键词查询的的需求。 文件宽 80 长几千万吧,有各类数据。 使用了 pandas 分块处理,最后只弄成搜索一个关键词需要十几分钟。 大伙有什么只用 python 能更高效的建议吗?
1 leimao Oct 18, 2022 via iPhone 试试 GPU 加速的 rapids |
2 abc612008 Oct 18, 2022 转 sqlite 再查? |
3 leimao Oct 18, 2022 via iPhone 另外 CSV 格式应该并不是高效的用于检索的格式,时间复杂度为 O(N) |
4 swulling Oct 18, 2022 via iPhone 转 sqlite 是很好的主意。 |
5 dji38838c Oct 18, 2022 把数据导入 BigQuery 用 Python 调 SQL 查询 10G 的表,三十秒够了。 |
6 goodboysisme OP @dji38838c 搜索了下 BigQuery ,这是云端的吧。这个文档只能在本地断网机子上的,所以行不通 |
7 r6cb Oct 18, 2022 spark |
8 hefish Oct 18, 2022 我也觉着转 sqlite 的好,sqlite 不是云端吧? |
9 dlsflh Oct 18, 2022 via Android 有何加速 pandas 的库叫 modin 你看看有没有帮助。 |
10 wxf666 Oct 18, 2022 转 sqlite 后,用 sqlite 的 FTS5 全文搜索,能满足需求吗? ( Trigram 分词器支持 3 字及以上的 LIKE '%关键词%' 搜索。 或者,有个号称参考微信 sqlite 优化原理写的 simple 开源分词器,也支持中文分词?) |
11 FYFX Oct 18, 2022 你这主要是查询吧,找个数据库吧 |
12 goodboysisme OP |
13 freefcw Oct 19, 2022 还是没搞懂楼主的需求到底是什么,输入是什么,什么一个处理逻辑,输出是什么.... |
14 dayeye2006199 Oct 19, 2022 via Android 弄个本地的数据库,把数据搞里面。 根据查阅条件研究一下,应该对什么字段做索引比较好。 这么大的 CSV 文件,python 光读到内存里要花的时间就很客观吧。 |
15 HankLu Oct 19, 2022 社工? |
16 helloworld000 Oct 19, 2022 lz 除了 python ,还知道有个东西叫做数据库吗? |
17 suguo210 Oct 19, 2022 |
18 wtks1 Oct 19, 2022 via Android 直接塞进 sqlite 里,然后用 sql 语句查询 |
19 ETiV Oct 19, 2022 不如说说你的具体需求,毕竟直接 load 一个 10GB 的文件进各种本地的、远程的数据库都需要很久的时间。 比如,你提到的「关键词查询」:如果这个查询只跑个 1 、2 次,可以考虑下先 grep ,筛选出能够命中这些关键词的文件内容,再使用这个结果文件处理? 当然如果你这一个 10GB 的文件,需要一直反复的查询,导进数据库里还是最方便的… |
20 ytmsdy Oct 19, 2022 先干到数据库里面去吧。 |
21 someonedeng Oct 19, 2022 放数据库里 |
22 MasterofNone Oct 19, 2022 如果一定要用 pandas ,那么可以考虑加 dask ,再用 map 系列函数多核加速 |
23 PeterD Oct 19, 2022 可以试试 rg + xsv |
24 BJL Oct 19, 2022 赞同楼上,如果只是一次性查询,rg 非常的好用 |
25 xuelu520 Oct 19, 2022 楼上既然说到了数据库,要不考虑下 ES ?几千万数据写 ES ,查询都是秒秒钟呀。 |
26 goodboysisme OP Oct 19, 2022 |
27 goodboysisme OP @mmm159357456 我 6 个核都拉到百分之 80 左右了,dask 这个的确没有用过 |