1
noe132 2018-02-07 17:32:44 +08:00
超大文件不适合 JSON 存储。。。。
如果是一个大数组,可以想办法优化成 {...} {...} {...} 的 JSON line 格式去以行去读。或者如果每个对象占用行固定也可以以固定行数去读。。 否则你得把 4G 的文件整体解析到内存里才行。 |
2
bazingaterry 2018-02-07 17:38:00 +08:00 via iPhone
已知格式可以手寫 json parser,結合業務需求一點一點讀
|
3
wellsc 2018-02-07 17:39:56 +08:00
存到 mongo 里试试
|
4
twor 2018-02-07 19:08:06 +08:00
一行一行的读,解析后,扔到数据库,或者保存成其他格式?
|
5
huiyifyj 2018-02-07 19:11:17 +08:00
4G 的 Json.
0.0!!! |
6
MeteorCat 2018-02-07 20:06:05 +08:00 via Android
吓尿了 4G 的数据,解析起来内存应该爆炸了
|
7
Lxxyx 2018-02-07 20:18:37 +08:00 via Android
用 Node 处理过 3g 的 json,直接 load,v8 扛不住,后面用的是 stream 的方式,一点一点解析。(供参考)
|
8
neocanable 2018-02-07 22:33:15 +08:00
cat yourfile.json | grep -v "{" | grep -v "}," > new_file
新的文件格式就是: 'id': 'xxxxx' 'q' : 'xxxxx' 'a' : 'xxxxx' 'id': 'xxxxx' 'q' : 'xxxxx' 'a' : 'xxxxx' 'id': 'xxxxx' 'q' : 'xxxxx' 'a' : 'xxxxx' 然后一行一行的读吧,很简单 |
9
xiaozizayang 2018-02-07 23:30:27 +08:00 via Android
pandas 分段读取 或者 spark 吧
|
10
ulala 2018-02-07 23:38:29 +08:00 via iPad
曾经有类似的需求,一个好几 g 的文件,每一行一个 json 对象。写了个 C 程序一行行读入,然后抛到队列里并发用 rapidjson 去解析。速度还是挺快的。
|
11
zc666 2018-02-08 00:46:15 +08:00 via iPad
可以了解下 jq
|
12
binux 2018-02-08 01:44:54 +08:00
streaming JSON parser python
|
13
KaelSunstrider 2018-02-08 01:54:41 +08:00
一行一行 yield 出来,处理一行就继续 yield 下一行。或则使用 ubuntu 下的行切割命令分成小文件再处理
|
14
cout2013mr 2018-02-08 09:22:21 +08:00
要是数组还好,可以一行行来读文件,你要是个整个大对象,key 还没有命名规则的话,真想不到什么好方法。。
|
15
UN2758 OP 谢谢大家了,倒腾来倒腾去发现 json 确实不合适储存大文件,改用 csv 了
|
16
xwhxbg 2018-02-08 16:56:52 +08:00
readline,我用 js 读过 5 个多 G 的文件
|