有一个很大的 json 文件,要如何才能将它读到内存中呢, 4 个多 G

2018 年 6 月 5 日
 RicardoScofileld

尝试用 pickle.loads 读到内存,直接内存溢出了,试着用 pandas.read_json()读取,但是报错,Excepted object or value 黔驴技穷,不知道该咋弄了

16114 次点击
所在节点    Python
60 条回复
opengps
2018 年 6 月 5 日
要不你试试用工具把内存映射成硬盘,然后当作硬盘读写?
不过貌似没有长期免费的内存映射硬盘工具
purebluesong
2018 年 6 月 5 日
怎么写的怎么读吧,python 的 loads 会在内存中占用成 10 倍磁盘空间的大小。
不过如果 Expected object or value 的话应该这个文件本身就有问题了,说不定因为文件大小限制而被截断了
Luckyray
2018 年 6 月 5 日
这么大还用 json 不太合适吧……
likuku
2018 年 6 月 5 日
某些数据库已经支持 Json 数据类型了,先塞进去,Py 再去读 DB 呢?
zynlp
2018 年 6 月 5 日
加内存,就是这么直接
janxin
2018 年 6 月 5 日
才 4 个 G 不会爆内存的吧...你内存不够了?
ho121
2018 年 6 月 5 日
自己写个 json 解释器,支持流式读取
twor2
2018 年 6 月 5 日
开一个临时的大内存云服务器
lesteryu
2018 年 6 月 5 日
pip install ijson
Bramblex2
2018 年 6 月 5 日
你这 json 什么结构啊…如果层数深还是长度长?
maxco292
2018 年 6 月 5 日
iwtbauh
2018 年 6 月 5 日
@opengps Linux 自带 mount -t tmpfs 了解一下,内存文件系统,比内存盘还要高效
shilyx
2018 年 6 月 5 日
将你的需求映射为数据接口由 c++来处理,C++用 rapidjson 来读取

rapidjson 如果还是不行,就用 c++写一个针对文件的、有限功能的 json 库

如果自己搞不定,就外包
iwtbauh
2018 年 6 月 5 日
使用 64 位处理器,64 位操作系统和 64 位 Python 尝试

从理论上讲,64 位进程的虚拟内存可以高达 EB 级别( 32 位进程的虚拟内存通常只有 2GB 或 3GB,不可能超过 4GB )
scriptB0y
2018 年 6 月 5 日
建议使用 less 这种文本阅读工具看一下内容,然后根据内容用代码一部分一部分的读然后切成小文件,应该是比较快的方法。
lihongjie0209
2018 年 6 月 5 日
为什么不先导入到数据库
graysheeep
2018 年 6 月 5 日
搞策略交易么
est
2018 年 6 月 5 日
#9 楼 @lesteryu 回复正解。迭代式解析 json 即可。内存绝对不会爆炸。
RicardoScofileld
2018 年 6 月 5 日
@opengps 没接触过这种工具,推荐一个谢谢啦
RicardoScofileld
2018 年 6 月 5 日
@purebluesong 你说为啥 load 的时候,会达到文件本身 10 倍的内存占用呢,是因为 Python 的数据类型导致的吗

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

https://study.congcong.us/t/460511

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

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

© 2021 V2EX