Hadoop Streaming:Python加入不同的文件

时间:2013-11-26 12:04:55

标签: python hadoop mapreduce hadoop-streaming

我有一个进程,它接收输入数据,处理它并输出数据。在此过程中它生成两个日志IN.log和OUT.log

IN.log包含数据进入的时间和数据的数据。 OUT.log包含处理数据和数据的时间。 所以... IN.log包含   及时ID

OUT.log包含   out-time id

现在,作为使用python使用hadoop流进行处理的一部分,我想加入这两个文件,并提供intime和out time以及数据id的差异。

例如:

2秒id123

3秒id112

关于如何使用PYTHON实现这一目标的任何指示?

1 个答案:

答案 0 :(得分:0)

查看运行hadoop作业的MRjob帮助程序包。为这项任务编写一个map / reduce非常容易,这与下面的代码一致

from datetime import datetime
from MRJob import MRJob

class JoinJob(MRJob):
    fmt = '%Y-%M-%d'
    def steps(self):
        return [self.mr(mapper=self.mapper, 
                        reducer=self.reducer)]
    def mapper(self, rec_time, rec_id):
        yield rec_id, rec_time

    def reducer(self, rec_id, datetime_strs):
        datetimes = map(lambda x: datetime.strptime(x, self.fmt), 
                            datetime_strs)
        delta_secs = (max(datetimes) - min(datetimes)).total_seconds()
        yield rec_id, delta_secs

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