我有一个文件,每行包含XML元素,需要转换为JSON。我编写了一个Python脚本来执行转换,但是以串行模式运行。我有两个选项可以使用Hadoop或GNU Parallel,我尝试过Hadoop,想看看GNU如何提供帮助,肯定会很简单。
我的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 parallel来直接处理这个庞大的文件吗?或者我需要拆分它吗?
或者这是对的:
cat sample.xml | parallel python xmltojson.py >sample.json
由于
答案 0 :(得分:2)
您需要将Python代码更改为UNIX过滤器,即从标准输入(stdin)读取并写入标准输出(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"
然后在GNU Parallel中使用--pipepart
:
parallel --pipepart -a sample.xml --block 1M python my_script.py
调整1M so(number_of_cpu * 10)< (total_size / blocksize)< (number_of_cpu * 100)。这应该在开始新工作和等待旧工作完成之间给出合理的平衡。