【问题标题】:How to prematurely terminate MrJob reducer?如何提前终止 MrJob 减速器?
【发布时间】:2018-09-10 12:50:07
【问题描述】:

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

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

【问题讨论】:

    标签: python mapreduce filtering reduce mrjob


    【解决方案1】:

    这不会终止 reducer,但会阻止它接收任何新作业。它通过将特征计数维护为类字典来工作:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2014-08-04
      • 2017-03-11
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多