博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop C++ Pipes中context常见成员函数的作用
阅读量:2229 次
发布时间:2019-05-09

本文共 2627 字,大约阅读时间需要 8 分钟。

getJobConf

Get the JobConf for the current task

getInputKey

Get the current key

getInputValue

Get the current value

In the reducer, context.getInputValue is not available till context.nextValue is called !

progress

This method simply phones home to the NameNode, letting it know that the mapper or reducer is still working and has not died or zombified.

setStatus

The status message can be found in the hadoop*tasktracker*.log and in the web interface as "Status".

1 context.setStatus("Teke-lili");

getCounter

The counter will be displayed in the Web interface. You will have to get it once on init of the class.

nextValue

Iterate over the values. Important: The key will be the same all the time !

context.getInputValue is not available till context.nextValue is called 

例子:

假设输入文件是hello.txt

内容为:

hello world 

hello bupt

程序为:

#include "hadoop/Pipes.hh" #include "hadoop/TemplateFactory.hh" #include "hadoop/StringUtils.hh" const std::string WORDCOUNT = "WORDCOUNT"; const std::string INPUT_WORDS = "INPUT_WORDS"; const std::string OUTPUT_WORDS = "OUTPUT_WORDS"; class WordCountMap: public HadoopPipes::Mapper { // Mapper类 public: 	HadoopPipes::TaskContext::Counter* inputWords; 	WordCountMap(HadoopPipes::TaskContext& context) 	{ 		inputWords = context.getCounter(WORDCOUNT, INPUT_WORDS); 	} 	void map(HadoopPipes::MapContext& context) 	{ 		std::vector
words = HadoopUtils::splitString(context.getInputValue(), " "); // 按空格进行单词分割 for(unsigned int i=0; i < words.size(); ++i) { context.emit(words[i], "1"); // 单词作为key,value为1 } context.incrementCounter(inputWords, words.size()); // 向map-reduce提交进度信息 } }; class WordCountReduce: public HadoopPipes::Reducer { // reduce类 public: HadoopPipes::TaskContext::Counter* outputWords; WordCountReduce(HadoopPipes::TaskContext& context) { outputWords = context.getCounter(WORDCOUNT, OUTPUT_WORDS); } void reduce(HadoopPipes::ReduceContext& context) { int sum = 0; while (context.nextValue()) { sum += HadoopUtils::toInt(context.getInputValue()); // 统计单词出现的次数 } context.emit(context.getInputKey(), HadoopUtils::toString(sum)); // 输出结果 context.incrementCounter(outputWords, 1); } }; int main(int argc, char *argv[]) { return HadoopPipes::runTask(HadoopPipes::TemplateFactory
()); // 运行任务 }

一。MapContext:

内容为:

key->value

(1,hello word)  注:这里的1是该行的偏移量,具体值不一定是这个

(2,hello bupt)

getInpuptValue() 可以得到一行的value,例如头一次调用将得到:hello world

emit()

将以下内容写入

(hello,1)

(world,1)

(hell0,1)

(bupt,1)

二。ReduceContext:

以上一步的内容为输入,经过MapReduce框架处理以后得到,内容为:

(hello,[1,1])  注:这里已经将key相同的value放到了一块

(world,1)

(bupt,1)

context.nextValue() 将会前进到特定key的下一个Value

转载地址:http://yizbb.baihongyu.com/

你可能感兴趣的文章
用学习曲线 learning curve 来判别过拟合问题
查看>>
用验证曲线 validation curve 选择超参数
查看>>
用 Grid Search 对 SVM 进行调参
查看>>
用 Pipeline 将训练集参数重复应用到测试集
查看>>
PCA 的数学原理和可视化效果
查看>>
机器学习中常用评估指标汇总
查看>>
什么是 ROC AUC
查看>>
Bagging 简述
查看>>
详解 Stacking 的 python 实现
查看>>
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>