如何提前终止MrJob减速机?

时间:2018-03-31 20:20:15

标签: python mapreduce filtering reduce mrjob

我想使用MapReduce过滤满足某些条件的稀有实体的庞大数据集。一旦违反标准,我就可以通过终止减速器来加快速度,因为它们将计算我不感兴趣的实体。

举一个例子,说我有一个包含数十亿篇文章的语料库,我想只返回少于100个单词的文章。绝大多数文章都有> 100,000个单词,因此一旦达到停止标准(word_count> 100),我就可以通过终止减速器来跳过大部分工作。

1 个答案:

答案 0 :(得分:0)

这不会终止减速机,但会阻止它接收任何新的作业。它的工作原理是将要素的数量保持为类字典:

from mrjob.job import MRJob    

class Mr_Count_Words(MRJob):
    feature_counts = {}

    def mapper(self, _, line):
            ...

然后,在某处您可以计算功能并检查字典以查看您是否已融合:

try:
    self.feature_counts[feature_name] += 1
except KeyError:
    self.feature_counts[feature_name] = 1

if self.feature_counts[feature_name] > feature_thresh:
    return None
else:        
    yield ('feature_name', 1)