首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算mapreduce程序中调用map函数的次数?

如何计算mapreduce程序中调用map函数的次数?
EN

Stack Overflow用户
提问于 2015-09-24 09:50:35
回答 1查看 1.1K关注 0票数 0

我必须对输入数据执行某些操作,并使用mapreduce程序将其写入hdfs。我的输入数据看起来

代码语言:javascript
运行
复制
abc  
some data  
some data  
some data  
def  
other data  
other data  
other data 

并以同样的方式继续,其中abcdef是标头,some data是带制表符空间的记录。

我的任务是消除标题并将其附加到下面的记录中,如

代码语言:javascript
运行
复制
some data abc  
some data abc  
some data abc  
other data def  
other data def  
other data def  

每个标头将有50个记录。

我使用的是默认的记录读取器,所以它一次读取每一行。

现在,我的问题是,我如何知道映射函数已经被调用了第九次?我有什么柜台可以知道吗?这样,我就可以使用该计数器将标题追加到字符串中,如

代码语言:javascript
运行
复制
if (counter % 50 ==0 )
   *some code*

否则,静态变量是唯一的出路?

EN

回答 1

Stack Overflow用户

发布于 2015-09-24 10:03:54

您可以使用member variables来保持计数,到目前为止已经处理了多少。成员变量是instance variables,不会在每次调用映射函数时重置。可以在mapper setup方法中实例化它们。

显然,您可以使用静态变量来保存计数器。

HDFS中的数据存储在块中,当数据被分割成两个块时,您将如何处理。

要处理两个块之间的数据分割,您可能需要Reducers。减速器的属性是,所有与特定键相关的数据(值)总是发送给同一(单个)减速器。还原器的输入是keylist of values,在您的例子中是list of data。因此,您可以很容易地存储根据您的要求。

优化:您可以使用与Combiner相同的Reducer代码来优化数据传输。

Idea : Mapper将按原样发出keyvalue。现在,当Reducer接收到数据(即Key, List<value> )时,您的所有值都已经由MapReduce framework组合了。你只需要再发射一次。这是您正在寻找的输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32758322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档