Shuffle原理剖析

开局一张图

在这里插入图片描述

1.什么是Shuffle?

Shuffle,是指对Map输出结果进行分区、排序、合并等处理并交给Reduce 的过程。分为Map端的操作和Reduce端的操作。

2.Shuffle过程

1.Map端的Shuffle

Map的输出结果首先被缓存到内存,当缓存区容量达到80%(缓冲区默认100MB),就启动溢写操作。当启动溢写操作时,首先需要把缓存中的数据进行分区,然后对每个分区的数据进行排序和合并(combine),之后再写入磁盘文件。每次溢写操作会生成一个新的磁盘文件,随着Map任务的执行,磁盘中就会生成多个溢写文件。在Map任务全部结束前,这些溢写文件会被归并成一个大的磁盘文件,然后通知相应的Reduce任务来领取属于自己处理的数据。

2.在Reduce端的Shuffle过程

Reduce任务从Map端的不同Map机器领回属于自己处理的那部分数据,然后对数据进行合并,排序之后交给Reduce处理。‘

3.Shuffle的作用

  1. 保证每一个Reduce任务处理的数据大致是一致的。
  2. Map任务输出的key相同,一定是相同分区,并且肯定是相同的Reduce处理保证计算结果的准确性。
  3. Reduce任务的数量决定了分区的数量,Reduce任务越多计算处理的并行度也就越高。

Reduce任务的数量(默认为1)可以通过: job.setNumReduceTasks(数量)

4.Shuffle的特点

  1. Map端溢写时,key相同的一定是在相同的分区。
  2. Map端溢写时,排序减少了Reduce的全局排序的复杂度。
  3. Map端溢写时,合并(combiner【可选】减少溢写文件的体积,提高了Reduce任务在Fetch数据时的效率,它是一种MapReduce优化策略。
  4. Reduce端计算或输出时,它的数据都是有序的。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
朴素贝叶斯情感分析是一种基于朴素贝叶斯分类器的文本分类方法,它可以将文本分为积极、消极或中性等不同情感类别。其原理如下: 1. 收集数据集并进行预处理,包括去除停用词、分词、词干提取等。 2. 建立情感词典,包括积极词汇和消极词汇。 3. 计算每个词汇在积极和消极情感类别中出现的概率,即计算条件概率。这里使用了朴素贝叶斯分类器的基本原理,即假设每个特征(即每个词汇)相互独立。 4. 对于待分类的文本,计算其在积极和消极情感类别中的概率,并比较两者的概率大小,将文本分类为概率较大的情感类别。 5. 对分类结果进行评估,包括准确率、召回率、F1值等指标。 下面是一个简单的示例代码,用于对电影评论进行情感分析: ```python import nltk import random from nltk.corpus import movie_reviews # 收集数据集并进行预处理 documents = [(list(movie_reviews.words(fileid)), category) for category in movie_reviews.categories() for fileid in movie_reviews.fileids(category)] random.shuffle(documents) all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words()) word_features = list(all_words)[:2000] def document_features(document): document_words = set(document) features = {} for word in word_features: features['contains({})'.format(word)] = (word in document_words) return features featuresets = [(document_features(d), c) for (d,c) in documents] train_set, test_set = featuresets[100:], featuresets[:100] # 建立情感词典 pos_words = ['good', 'great', 'excellent', 'wonderful', 'perfect'] neg_words = ['bad', 'terrible', 'awful', 'poor', 'disappointing'] # 计算条件概率 classifier = nltk.NaiveBayesClassifier.train(train_set) # 对待分类的文本进行情感分析 text = "This movie is really bad" features = document_features(text.split()) prob_pos = classifier.prob_classify(features).prob('pos') prob_neg = classifier.prob_classify(features).prob('neg') if prob_pos > prob_neg: print("Positive") else: print("Negative") # 对分类结果进行评估 print(nltk.classify.accuracy(classifier, test_set)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值