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

2022-10-18 22:05:54 +08:00
 goodboysisme

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

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

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

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

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

当然如果你这一个 10GB 的文件,需要一直反复的查询,导进数据库里还是最方便的…
ytmsdy
2022-10-19 10:28:23 +08:00
先干到数据库里面去吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887921

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX