2016-05-23 2 views
1

У меня есть файл, содержащий XML-элементы в каждой строке, которые необходимо преобразовать в JSON. Я написал сценарий Python, который выполняет преобразование, но работает в последовательном режиме. У меня есть два варианта использования Hadoop или GNU Parallel, я пробовал Hadoop и хочу посмотреть, как GNU может помочь, будет простым.GNU Параллельно запускать скрипт Python на огромный файл

Мой Python код выглядит следующим образом:

import sys import json import xmltodict with open('/path/sample.xml') as fd: for line in fd: o=xmltodict.parse(line) t=json.dumps(o) with open('sample.json', 'a') as out: out.write(t+ "\n") Так я могу использовать GNU параллельно работать непосредственно на огромный файл или мне нужно разбить его?

Или это право: cat sample.xml | parallel python xmltojson.py >sample.json

Благодаря

ответ

1

Вы должны изменить код Python на фильтр UNIX, то есть программа, которая считывает данные из стандартного ввода (стандартный ввод) и выводит на стандартный вывод (STDOUT). Непроверенные:

import fileinput 
import sys 
import json 
import xmltodict 

for line in fileinput.input(): 
     o=xmltodict.parse(line) 
     t=json.dumps(o) 
     print t + "\n" 

Затем вы используете --pipepart в GNU Parallel:

parallel --pipepart -a sample.xml --block 1M python my_script.py 

Adjust 1M так (number_of_cpu * 10) < (TOTAL_SIZE/размер_блока) < (number_of_cpu * 100). Это должно дать разумный баланс между началом новых рабочих мест и ожиданием завершения старых работ.

+0

Должен доставить вас до 10 000, Оле! –

+1

Ole, который сокращает время с 59 минут до 15 секунд! – user3646519

Смежные вопросы