gpt4 book ai didi

python - MRJob 相同的 key 被发送到不同的 reducer

转载 作者:行者123 更新时间:2023-12-02 21:17:57 27 4
gpt4 key购买 nike

所以我在一个 3 机器集群上安装了 Hadoop 2.7.1。我正在尝试使用 MRJob 和 Hadoop Streaming 运行倒排索引 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)
]

但是,我注意到在我的输出中,我经常得到相同的 key 到两个不同的 reducer 。这导致输出如下所示:
Key | Output
Z | 2
X | 1,2
X | 3
Z | 1

这意味着一个reducer 获取X 键和值1 和2,而另一个reducer 也获取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 默认设置了以下内容:

'stream.num.map.output.key.fields': '2'

我通过在jobconf中明确设置解决了这个问题:
'stream.num.map.output.key.fields': '1'

我不知道 2 如何成为此设置的默认值,但至少我解决了我的问题

关于python - MRJob 相同的 key 被发送到不同的 reducer ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38277503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com