我必须对我的输入数据进行某些操作,并使用mapreduce程序将其写入hdfs。我的输入数据看起来像
abc
some data
some data
some data
def
other data
other data
other data
以同样的方式继续,在哪里 `` , def
标题和 some data
是带制表符空间的记录。
我的任务是删除标题并将其附加到下面的记录中,如
some data abc
some data abc
some data abc
other data def
other data def
other data def
每个标题将有50条记录。
我使用的是默认的记录阅读器,所以它一次读取每一行
现在我的问题是如何知道map函数已经被调用了n次?我有柜台知道吗?这样我就可以用这个计数器将头附加到字符串
if (counter % 50 ==0 )
*some code*
或者静态变量是唯一的方法?
1条答案
按热度按时间dz6r00yl1#
你可以用
member variables
算一下,到目前为止已经处理了多少。成员变量是instance variables
并且不会在每次调用map函数时重置。可以在mapper中示例化它们setup
方法。显然,可以使用静态变量来保持计数器。
hdfs中的数据存储在块中,当数据被拆分为两个块时,您将如何处理。
要处理两个块之间的数据分割,可能需要
Reducers
. reducer的属性是,与特定键相关的所有数据(值)总是发送到同一个(单个)reducer。减速器的输入为key
以及list of values
你的情况是这样的list of data
. 所以你可以很容易地根据你的要求储存它们。优化:您可以使用相同的
Reducer
代码为Combiner
优化数据传输。创意:the
Mapper
将发出key
以及value
就这样。现在当Reducer
接收数据,即Key, List<value>
,所有值都已由MapReduce framework
. 你只需要再次发射它们。这是您要查找的输出。