mapper.py
工作正常。我在群集上运行mapper.py
并将其输出存储在part-0.txt
。
像字数统计工作一样,我试图计算存储在part-0.txt
文件中的每个不同密钥的出现次数。
我尝试从这个链接复制粘贴代码: http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
虽然有效但我无法理解它的减速机代码,所以我写了自己的减速机。
以下是reducer 代码:
#!/usr/bin/env python
from numpy import *
import sys
arr = []
previous_printed_word = ''
#f=open('/home/nalin/Downloads/part-0.txt','r')
for line in sys.stdin:
line = line.strip()
current_word, current_count = line.split('\t',1)
current_count = 0
if(previous_printed_word != current_word):
#f2 = open('/home/nalin/Downloads/part-0.txt', 'r')
for line2 in sys.stdin:
line2 = line2.strip()
word, count2 = line2.split('\t', 1)
count2 = int(count2)
if current_word == word:
current_count = current_count + count2
else:
continue
print '%s\t\t\t%d' % (current_word, current_count-1)
arr.append ( [current_word, current_count-1] )
previous_printed_word = current_word
arr = sorted(arr, key=lambda row: row[1])
#print arr
length=len(arr)
print "LENGHT OF 2-D ARRAY IS = ",length
for i in range(1,11):
print arr[length-i]
我一直收到错误:
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
我尝试查找此错误的含义,并发现当代码出现问题时会出现此错误。
但如果我取消注释这两行:
f = open('/home/nalin/Downloads/part-0.txt', 'r')
f2 = open('/home/nalin/Downloads/part-0.txt', 'r')
放f
& f2
代替sys.stdin
(在两次出现的sys.stdin中),它就像魅力一样。
当我在mappers输出文件上运行它时它正在工作。 当我在我的集群上运行它时,它无法正常工作。
帮我弄清楚代码中出了什么问题。