[英]How to prematurely terminate MrJob reducer?
我想使用MapReduce篩選滿足某些條件的稀有實體的龐大數據集。 一旦減速器違反了標准,我可以終止它們,從而大大加快速度,因為它們將在我不感興趣的實體上進行計算。
舉一個例子,假設我有一個包含數十億篇文章的語料庫,而我只想返回少於100個單詞的文章。 絕大多數文章的詞數均大於100,000,因此我可以通過在滿足停止條件(word_count> 100)時終止reduce來跳過大部分工作。
這不會終止減速器,但會阻止它接收任何新作業。 它通過將一些功能作為類字典進行維護來工作:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.