2016-05-23 6 views
1

私はJSONに変換する必要があるすべての行にXML要素を含むファイルを持っています。私は変換を行うがシリアルモードで動作するPythonスクリプトを書いている。私はHadoopまたはGNU Parallelを使用する2つのオプションを持っています。私はHadoopを試してみて、GNUがどのように役立つかを見たいと思っています。次のようにGNU Parallelで巨大ファイルの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

はあなたがUNIXフィルタにあなたのPythonコードを変更する必要があるおかげで

答えて

1

、標準入力(stdin)から読み込み、標準出力に書き込むプログラム(標準出力、すなわち)。未テスト:

import fileinput 
import sys 
import json 
import xmltodict 

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

その後、GNUパラレルに--pipepartを使用します。

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

ので(number_of_cpu * 10)<(TOTAL_SIZE /ブロックサイズ)<(* 100 number_of_cpu)を1Mを調整します。これにより、新しいジョブの開始と古いジョブの完了を待つ間に、妥当なバランスが取られます。

+0

オレに10kを手に入れよう! –

+1

オレは59分から15秒に時間を短縮! – user3646519

関連する問題