整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

2.3.1. map和reduce

hadoop 花牛 9℃ 0评论

MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段。每个阶段都以键值对作为输入和输出,其类型由程序员来选择。程序员还需要写两个函数:map函数和reduce函数。

map阶段的输入是NCDC原始数据。我们选择文本格式作为输入格式,将数据集的每一行作为文本输入。键是某一行起始位置相对于文件起始位置的偏移量,不过我们不需要这个信息,所以将其忽略。

我们的map函数很简单。由于我们只对年份和气温属性感兴趣,所以只需要取出这两个字段数据。在本例中,map函数只是一个数据准备阶段,通过这种方式来准备数据,使reducer函数能够继续对它进行处理:即找出每年的最高气温。map函数还是一个比较适合去除已损记录的地方:此处,我们筛掉缺失的、可疑的或错误的气温数据。

为了全面了解map的工作方式,我们考虑以下输入数据的示例数据(去除了一些未使用的列,并用省略号表):

0067011990999991950051507004…9999999N9+00001+99999999999…

0043011990999991950051512004…9999999N9+00221+99999999999…

0043011990999991950051518004…9999999N9-00111+99999999999…

0043012650999991949032412804…0500001N9+01111+99999999999…

0043012650999991949032418004…0500001N9+00781+99999999999…

这些行以键/值对的方式作为map函数的输入:

(0,0067011990999991950051507004…9999999N9+00001+99999999999…)

(106,0043011990999991950051512004…9999999N9+00221+99999999999…)

(212,0043011990999991950051518004…9999999N9-00111+99999999999…)

(318,004B012650999991949032412004…0500001N9+01111+99999999999…)

(424,0043012650999991949032418004…0500001N9+00781+99999999999…)

 

键(key)是文件中的行偏移量,map函数并不需要这个信息,所以将其忽略。map函数的功能仅限于提取年份和气温信息(以粗体显示),并将它们作为输出(气温值已用整数表示):

(1950,0)

(1950,22)

(1950,-11)

(1949,111)

(1949,78)

map函数的输出经由MapReduce框架处理后,最后发送到reduce函数。这个处理过程基于键来对键值对进行排序和分组。reduce函数看到的是如下输入:

(1949,[111,78])

(1950,[0,22,-11])

每一年份后紧跟着一系列气温数据。reduce适数现在要做的是遍历整个列表并从中找出最大的读数:

(1949,111)

(1950,22)

这是最终输出结果:每一年的全球最髙气温记录。

整个数据流如图2-1所示。在图的底部是Unix管线,用于模拟整个MapReduce的流程,部分内容将在讨论HadoopStreaming时再次涉及。

图2-1.MapReduce的逻辑数据流

转载请注明:全栈大数据 » 2.3.1. map和reduce

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址