Повышение скорости обработки больших данных (файлы bz2) - PullRequest
0 голосов
/ 08 апреля 2019

Я написал этот код для фильтрации файлов 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')
...