这些超大的 JSON 文件来自 Cuckoo Sandbox 的 report ,主要内容是一系列的系统 API 调用,包含 API 名称和参数。这些 JSON 文件大小一般在几十~几百 MB 之间。
一份55MB左右的JSON 链接: http://pan.baidu.com/s/1eRZevq6 密码: 2h95
请问这种场景下有没有一个比较好的解决方案可以实现上面的需求?
1
Kisesy 2016-04-20 22:14:05 +08:00
能先提供一份这样的文件吗?
|
3
WittBulter 2016-04-20 22:33:04 +08:00
关注一波,我也有这样的问题
|
4
blahgeek 2016-04-20 22:50:44 +08:00
google "json sax parser"看看
|
5
yingjun424 2016-04-21 00:15:45 +08:00 via iPhone
有没有可能这样 将这个大文件先切分成若干个小文件 然后对每个小文件分别计算 最后将这些结果再综合计算…也就是 map reduce 的想法…这个只是拍脑袋想 但是可以往这方面想想…没必要一次性处理完
|
6
anerevol 2016-04-21 00:50:45 +08:00
用 swift 写了脚本跑了下, 55MB 文件处理内存占用 76M 的样子
|
7
hpeng 2016-04-21 01:06:27 +08:00 via iPhone
开始想到 Jackson 的 TreeNode 然后看了下内容,好吧 py
|
8
kn007 2016-04-21 01:34:43 +08:00 via Android
Mark ,明天睡醒看解决方案
|
9
iyaozhen 2016-04-21 01:49:17 +08:00
这个需求挺有意思的,也有类似的场景。感谢楼主提供数据,有时间试试。
|
10
ipconfiger 2016-04-21 02:08:56 +08:00
貌似 json 没有流式处理的方法......... 按道理来说应该是可以的
|
11
dapang1221 2016-04-21 02:17:45 +08:00 via Android
手机在线,还没看那个文件。。 json 能拆开么?拆成每个 api 一个 json ,或是按其他方式重新整理下,这样处理一遍扔进 mongodb 就能避免 16MB 大小问题了。而且这种系统的 api 也不频繁更新,弄一遍能用好久
|
12
qiukun 2016-04-21 10:15:47 +08:00 via Android
手写 dfa 。
|
13
hansnow OP @dapang1221 整个 json 文件是一个大的 object ,貌似不是很容易分开
|
14
lxy42 2016-04-21 12:36:43 +08:00
我记得 Python 的 JSON 库在解析 json 时可以提供一个过滤的回调函数,这样就可以边解析边去重
|
15
lxy42 2016-04-21 13:59:55 +08:00 1
import json
import time api_set = set() def object_hook(dct): if "api" in dct: api_set.add(dct['api']) return dct['api'] return dct data = json.load(open("report2.json"), object_hook = object_hook) print 'api length: {}'.format(len(api_set)) for api in api_set: print api #time.sleep(10) ============= 测试的文件是你上传到百度网盘的那个, windows10 下用任务管理器查看 python 进程内存占用峰值 60M ,但马上降下来。速度应该还行,不知道是否满足需求,楼主可以试试。 |
16
lxy42 2016-04-21 14:06:55 +08:00
|