MapReduce业务程序用SQL来解决的一些思路

业务场景:

现有数据如下:

需求:统计每个单词在不同文件中分别出现的次数,输出如下格式:

hello    a.html-->4 b.html-->4 c.html-->6

hello在a文件中出现4次,在b文件中出现4次,c文件中出现6次。。。

 

思路:

问题:分组条件必然是单词和文件名称,关键是怎么每次map和reduce该如何确定输入输出结果呢?

拓展:如果是用SQL来统计会不会容易些?于是根据每行数据在mySQL中造了如下数据

SQL统计:

SELECT t.word,group_concat(CONCAT(path,':',count)) result,sum(t.count) total
FROM(
		SELECT word,path,count(1) count
		FROM word
		GROUP BY word,path) t
GROUP BY t.word

看的出来,用SQL统计的话很简单

SQL写出来后发现分两次查询,第一次分组查询的结果作为第二次的查询的来源
其中分两次GROUP BY,于是想到分两次mapReduce程序来聚合

第一次分组聚合:

SQL版本:

MapReduce:中间结果

* 第一步:输出结果:单词-文件名   次数
* hello-a.txt    2
* hello-b.txt    3

第二次分组聚合:

MapReduce:最终结果

* 第二步:最终输出结果
* hello  a.txt:2; b.txt:3

这样确定思路后MapReduce代码就很简单,这里就不贴代码了

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值