分享

RHadoop实验 – 统计邮箱出现次数

52Pig 发表于 2014-11-2 22:05:12 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 9160
阅读导读:

1.用R语言如何统计出邮箱出现的次数?
2.代码如何编写?






1. 需求描述

基于RHADOOP通过rmr包实现MapReduce算法
  • 1). 计算邮箱域出现了多少次
  • 2). 按次数从大到小排序

例如:
163.com,14
sohu.com,2
2. 实验数据
  1. wolys@21cn.com
  2. zss1984@126.com
  3. 294522652@qq.com
  4. simulateboy@163.com
  5. zhoushigang_123@163.com
  6. sirenxing424@126.com
  7. lixinyu23@qq.com
  8. chenlei1201@gmail.com
  9. 370433835@qq.com
  10. cxx0409@126.com
  11. viv093@sina.com
  12. q62148830@163.com
  13. 65993266@qq.com
  14. summeredison@sohu.com
  15. zhangbao-autumn@163.com
  16. diduo_007@yahoo.com.cn
  17. fxh852@163.com
  18. weiyang1128@163.com
  19. licaijun007@163.com
  20. junhongshouji@126.com
  21. wuxiaohong11111@163.com
  22. fennal@sina.com
  23. li_dao888@163.com
  24. bokil.xu@163.com
  25. 362212053@qq.com
  26. youloveyingying@yahoo.cn
  27. boiny@126.com
  28. linlixian200606@126.com
  29. alex126126@126.com
  30. 654468252@qq.com
  31. huangdaqiao@yahoo.com.cn
  32. kitty12502@163.com
  33. xl200811@sohu.com
  34. ysjd8@163.com
  35. 851627938@qq.com
  36. wubo_1225@163.com
  37. kangtezc@163.com
  38. xiao2018@126.com
  39. 121641873@qq.com
  40. 296489419@qq.com
  41. beibeilong012@126.com
复制代码
3. 算法实现

1). 计算邮箱域出现了多少次
把数据上传到HDFS
  1. library(rmr2)
  2. data<-read.table(file="hadoop15.txt")
  3. d0<-to.dfs(keyval(1, data))
  4. from.dfs(d0)
复制代码
输出:
  1. $key
  2. [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  3. [39] 1 1 1
  4. $val
  5. V1
  6. 1 wolys@21cn.com
  7. 2 zss1984@126.com
  8. 3 294522652@qq.com
  9. 4 simulateboy@163.com
  10. 5 zhoushigang_123@163.com
  11. 6 sirenxing424@126.com
  12. 7 lixinyu23@qq.com
  13. 8 chenlei1201@gmail.com
  14. 9 370433835@qq.com
  15. 10 cxx0409@126.com
  16. 11 viv093@sina.com
  17. 12 q62148830@163.com
  18. 13 65993266@qq.com
  19. 14 summeredison@sohu.com
  20. 15 zhangbao-autumn@163.com
  21. 16 diduo_007@yahoo.com.cn
  22. 17 fxh852@163.com
  23. 18 weiyang1128@163.com
  24. 19 licaijun007@163.com
  25. 20 junhongshouji@126.com
  26. 21 wuxiaohong11111@163.com
  27. 22 fennal@sina.com
  28. 23 li_dao888@163.com
  29. 24 bokil.xu@163.com
  30. 25 362212053@qq.com
  31. 26 youloveyingying@yahoo.cn
  32. 27 boiny@126.com
  33. 28 linlixian200606@126.com
  34. 29 alex126126@126.com
  35. 30 654468252@qq.com
  36. 31 huangdaqiao@yahoo.com.cn
  37. 32 kitty12502@163.com
  38. 33 xl200811@sohu.com
  39. 34 ysjd8@163.com
  40. 35 851627938@qq.com
  41. 36 wubo_1225@163.com
  42. 37 kangtezc@163.com
  43. 38 xiao2018@126.com
  44. 39 121641873@qq.com
  45. 40 296489419@qq.com
  46. 41 beibeilong012@126.com
复制代码
计算邮箱域出现了多少次
  1. mr<-function(input=d0){
  2. map<-function(k,v){
  3. keyval(word(as.character(v$V1), 2, sep = fixed('@')),1)
  4. }
  5. reduce =function(k, v ) {
  6. keyval(k, sum(v))
  7. }
  8. d1<-mapreduce(input=input,map=map,reduce=reduce,combine=TRUE)
  9. }
  10. d1<-mr(d0)
  11. from.dfs(d1)
  12. 输出:
  13. $key
  14. [1] "126.com" "163.com" "21cn.com" "gmail.com" "qq.com"
  15. [6] "sina.com" "sohu.com" "yahoo.cn" "yahoo.com.cn"
  16. $val
  17. [1] 9 14 1 1 9 2 2 1 2
复制代码
2). 按次数从大到小排序
  1. sort<-function(input=d1){
  2. map<-function(k,v){
  3. keyval(1,data.frame(k,v))
  4. }
  5. reduce<-function(k,v){
  6. v2<-v[order(as.integer(v$v),decreasing=TRUE),]
  7. keyval(1,v2)
  8. }
  9. d2<-mapreduce(input=input,map=map,reduce=reduce,combine=TRUE)
  10. }
  11. d2<-sort(d1)
  12. result<-from.dfs(d2)
  13. result$val
复制代码
输出:
  1. k v
  2. 2 163.com 14
  3. 1 126.com 9
  4. 5 qq.com 9
  5. 6 sina.com 2
  6. 7 sohu.com 2
  7. 9 yahoo.com.cn 2
  8. 3 21cn.com 1
  9. 4 gmail.com 1
  10. 8 yahoo.cn 1
复制代码






点评

格式加强  发表于 2014-11-2 22:41

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条