GNU Parallel在巨大的文件上运行Python脚本

时间:2016-05-23 23:18:59

标签: python-2.7 parallel-processing gnu

我有一个文件,每行包含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

由于

1 个答案:

答案 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)。这应该在开始新工作和等待旧工作完成之间给出合理的平衡。