所以我把hadoop2.7.1安装在一个3机集群上。我正在尝试使用MRJob和Hadoop流媒体运行一个反向索引mapreduce作业。在
以下是我的配置:
MRJob.SORT_VALUES = True
def steps(self):
JOBCONF_STEP1 = {
"mapred.map.tasks":20,
"mapred.reduce.tasks":10
}
return [MRStep(jobconf=JOBCONF_STEP1,
mapper=self.mapper,
reducer=self.reducer)
]
然而,我注意到在我的输出中,我经常得到同一个键到两个不同的减速器。这将导致如下输出:
^{pr2}$这意味着一个减速器获得X键和值1和2,而另一个减速器也获得X键和值3。但是我只需要一个reducer来获得X键和所有相关的值。在
所以期望的输出是:
Key | Output
X | 1,2,3
Z | 1,2
如何解决此问题?在
这是我的MRJob代码
%%writefile invertedIndex.py
import json
import mrjob
from mrjob.job import MRJob
from mrjob.step import MRStep
class MRinvertedIndex(MRJob):
MRJob.SORT_VALUES = True
def steps(self):
JOBCONF_STEP1 = {
"mapred.map.tasks":20,
"mapred.reduce.tasks":10
}
return [MRStep(jobconf=JOBCONF_STEP1,
mapper=self.mapper,
reducer=self.reducer)
]
def mapper(self,_,line):
key, stripe = line.split("\t")
stripe = json.loads(stripe)
for w in stripe:
yield w, key
def reducer(self,key,values):
d = [v for v in values]
yield key,d
if __name__ == '__main__':
MRinvertedIndex.run() enter code here
明白了。问题是MRJob默认设置了以下内容:
我通过在jobconf中显式设置来解决问题:
^{pr2}$我不知道2怎么会成为这个设置的默认值,但至少我解决了我的问题
相关问题 更多 >
编程相关推荐