Я написал этот код для фильтрации файлов bz2 со структурой "json" и записи отфильтрованных данных в новый файл. Я пытаюсь улучшить скорость работы скрипта, используя, например, библиотеку ujson
вместо json
.
Какие еще есть возможности для улучшения производительности?
import bz2
import ujson
import json
from pandas.io.json import json_normalize
filenameInput = "comJson.bz2"
filenameOutput = "com.json"
filterList = ["id10",
"id11",
"id12"]
with bz2.open(filenameInput, "rt") as bzinput:
with open(filenameOutput, "x") as jsonOutput:
lines = []
#reading bz2 one at a time
for i, line in enumerate(bzinput):
line_json = ujson.loads(line)
df = json_normalize(line_json)
#filter data by if column "id" matches id in list "filterList"
if df.id[0] in filterList:
df_subset = df[['id', 'classA', 'classB', 'classC']]
json_string = json.dumps({'id': df_subset.id[0],
'classA': df_subset.classA[0],
'classB': df_subset.classB[0],
'classC': df_subset.classC[0]},
indent=None)
jsonOutput.write(json_string + '\n')
Время, потребляемое функциями:
#runtime: 0.002026081085205078s
line_json = ujson.loads(line)
df = json_normalize(line_json)
#runtime: 0.0s
if df.id[0] in filterList:
#runtime: 0.001997304916381836s
df_subset = df[['id', 'classA', 'classB', 'classC']]
#runtime: 0.002999544143676758s
json_string = json.dumps({'id': df_subset.id[0],
'classA': df_subset.classA[0],
'classB': df_subset.classB[0],
'classC': df_subset.classC[0]},
indent=None)
#runtime: 0.006982088088989258s
jsonOutput.write(json_string + '\n')