mrjob与JSON数据

时间:2016-11-19 11:23:36

标签: python json mrjob

我和我的一个朋友正在研究一个相当大的JSON文件。我们希望对此文件的某些部分执行MapReduce,尽可能快速。由于似乎很难将JSON文件直接输入“mrjob作业”,因此我们尝试将所需数据写入文本文件(其中每一行都是一个数组元素,从json中提取)。由于光盘写操作,这个中间步骤占用了太多时间。

以下是我们的mrjob测试文件的示例。

from mrjob.job import MRJob
import json

class ReduceData(MRJob):

    def mapper(self, _, line):
        lineJSON = json.loads(line)
        yield lineJSON[2], 1

    def reducer(self, key, values):
        yield key, sum(values)

if __name__ == '__main__':
    ReduceData.run()

上面的代码运行如下:

$ python reducedata.py data.txt

read_json 如下所示

import ijson

f = open('testData.json')
parser = ijson.parse(f)

if __name__ == '__main__':
    for prefix, event, value in parser:
        if (prefix, event) == ('data.item', 'start_array'):
            item = []
        elif prefix == 'data.item.item' and value is not None:
            item.append(value)
        elif (prefix, event) == ('data.item', '
            item = []
            # yield data as output, or something?

如上所述,我有两个问题:

1)有没有办法将 read_json.py 的输出作为 reducedata.py 的输入提供,而不执行写入光盘操作?

2)如果1)可以,我该如何指定输出? mrjob需要一个文件,并逐行调用映射器。 read_json.py 中的每个产量(底部注释)应该是“行”。

提前致谢!

-Superdids

0 个答案:

没有答案