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