我有一个12 GB的文件,其中每一行都是以下形式的JSON对象:
{
"name": "abc",
"val1":500,
"val2":30,
"val3":{
"topic1":{
"val4":["abc","xyz"],
"val5":["asdf"]
}
}
}
遗憾的是,对象结构无法更改。
假设我在此文件中有另一行:
{
"name": "abc",
"val1":300,
"val2":10,
"val3":{
"topic2":{
"val4":["hello","world"],
"val5":["test"]
}
}
}
我现在需要合并具有相同名称的对象,以便获得表单的对象:
{
"name": "abc",
"val1":800,
"val2":40,
"val3":{
"topic1":{
"val4":["abc","xyz"],
"val5":["asdf"]
},
"topic2":{
"val4":["hello","world"],
"val5":["test"]
}
}
}
我正在逐行读取文件并在Python中加载每行的JSON对象。所以每一行基本上都变成了Python dict()
。然后我将此对象存储在MongoDB集合中,如果文件中出现另一个具有相同名称的对象,我将更新Mongo记录,使其合并,如上例所示。
我试图遵循与Integrating multiple dictionaries in python (big data)中相同的方法,但我使用Mongodb来适应某些值的对象结构。但是,即使对于400 MB的样本文件,这也非常慢。
有没有办法更好地做到这一点,可能使用某种并行处理?
答案 0 :(得分:0)
这段代码应该有所帮助。
# not tested
import json
mydict = {}
with open(myfile,'r') as infile:
for line in infile:
myline = json.loads(line)
if myline['name'] in mydict:
mydict[myline['name']]['val1'] += myline['val1']
mydict[myline['name']]['val2'] += myline['val2']
mydict[myline['name']]['val3'] += [myline['val3']]
else:
mydict[myline['name']] = myline
mydict[myline['name']]['val3'] = [myline['val3']]
然而,你的问题确实很模糊,所以这是我对你要完成的事情的看法。
编辑:我只是连接字典,但您可以在.append(myline)
发生的部分实现更复杂的合并逻辑。