首页 理论教育 MapReduce编程实例分享

MapReduce编程实例分享

时间:2026-01-23 理论教育 卡哇伊 版权反馈
【摘要】:Map函数和Reduce函数是交给用户实现的,这两个函数定义了任务本身。Map函数接受一个键值对,产生一组中间键值对,MapReduce框架会将Map函数产生的中间键值对按键相同的值传递给一个Reduce函数。利用MapReduce实现关键词“甲状腺”的词频统计。以下分别通过Map和Reduce来分析统计词频。

Map函数和Reduce函数是交给用户实现的,这两个函数定义了任务本身。Map函数接受一个键值对,产生一组中间键值对,MapReduce框架会将Map函数产生的中间键值对按键相同的值传递给一个Reduce函数。Reduce函数接收一个键及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。下面以统计词频的实例来理解这两个函数。

例如,用户有如下文本文件:

文本1.txt:“甲状腺是脊椎动物非常重要的腺体,属于内分泌器官。它位于颈部甲状软骨下方,气管两旁。人类的甲状腺形似蝴蝶,犹如盾甲,故以此命名。”

文本2.txt:“甲状腺控制使用能量的速度、制造蛋白质、调节身体对其他荷尔蒙的敏感性,甲状腺依靠制造甲状腺素来调整这些反应。这两者调控代谢、生长速率还有调解其他的身体系统。”

利用MapReduce实现关键词“甲状腺”的词频统计。高层结构的Java代码如下。

以下分别通过Map和Reduce来分析统计词频。(https://www.xing528.com)

在实际操作时,首先要考虑停词的存储问题。因为停词比较少,所以选择将它们全部存储到内存中。

Map任务说明:对于Map传进来的每一行文本,首先将标点符号全部替换成空格,然后再循环分析每一个单词,如果这个单词不包括在停词集合中,则将其Key设为单词本身,值设置为1。

Map函数接收的键是文件名,值是文件的内容,Map逐个遍历单词,每遇到一个单词“甲状腺”,就产生一个中间键值对<“甲状腺”,1>,这表示又找到了一个单词“甲状腺”;MapReduce把键相同(都是单词“甲状腺”)的键值对传给Reduce函数。

Reduce任务说明:Reduce函数接收的键就是单词“甲状腺”,数值列表中的值都是1,个数等于键为“甲状腺”的键值对的个数,然后将这些1累加就得到单词“甲状腺”的出现次数,结果为5。最后这些单词的出现次数“5”会被写到用户定义的位置,存储到底层的分布式存储系统。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈