hadoop mapreduce与python错误实现两个表连接

时间:2016-02-23 08:16:06

标签: python hadoop mapreduce

我是hadoop的新手。我用python实现了两个表的连接。

一个表格,其中学生信息为stu id和name,另一个表格的成绩信息为stu id,class id和grade。(数据在此问题的最后)

用cat ./data* | python mapper.py | sort | python reducer.py

我得到了正确的答案,但是在hadoop过程中,我收到以下错误:

INFO mapreduce.Job:任务ID:attempt_1456069308240_0019_m_000001_2,状态:未通过 错误:java.lang.RuntimeException:PipeMapRed.waitOutputThreads():子进程失败,代码为2 代码如下:

映射器代码:

import os

import sys

def mapper():
    for line in sys.stdin:
        if len(line.strip())== 0:
            continue        
        field = line[:-1].split('\t')
        if len(field) ==2:
            print '%s\t%s\t%s' % (field[0],'0',field[1])
        elif len(field) ==3:
            print '%s\t%s\t%s\t%s' % (field[0],'1',field[1],field[2])

if __name__=='__main__':   
    mapper()

reducer code:

def reducer():
    lastsno=""
    for line in sys.stdin:
        if len(line.strip())== 0:
            continue
        field = line[:-1].split('\t')
        sno = field[0]
        if sno != lastsno:
            name = ""
            if field[1] == "0":
                name = field[2]
        elif sno == lastsno:
            if field[1] == "1":
                courseno =field[2]
                grade = field[3]
                if name:
                    print '%s\t%s\t%s\t%s' % (lastsno,name,courseno,grade)
        lastsno = sno

if __name__=='__main__':   
    reducer()

数据正好在

之下

datainfo:

2014211011  taiyuan
2014211012  tiantian
2014211013  kk
2014211014  tank
2014211015  lc
2014211016  wjs
2014211017  gyc
2014211018  hd
2014211019  cx

data_grade:

2014211012  011 80
2014211012  012 95
2014211013  011 40
2014211014  013 38
2014211011  011 35
2014211013  022 40
2014211015  011 80

使用上面的cat python脚本,我可以在下面得到正确答案:

2014211011  taiyuan 011 35
2014211012  tiantian    011 80
2014211012  tiantian    012 95
2014211013  kk  011 40
2014211013  kk  022 40
2014211014  tank    013 38
2014211015  lc  011 80

但是hadoop中的错误,请帮助我,谢谢。

0 个答案:

没有答案