看到一篇不知道是好好玩还是好玩玩童鞋的博客,发现一道好玩的mapreduce题目,地址http://www.cnblogs.com/songhaowan/p/7239578.html

如图

由于自己太笨,看到一大堆java代码就头晕、心慌,所以用python把这个题目研究了一下。


题目:寻找共同好友。比如A的好友中有C,B的好友中有C,那么C就是AB的共同好友。

  1. A:B,C,D,F,E,O
  2.  
  3. B:A,C,E,K
  4.  
  5. C:F,A,D,I
  6.  
  7. D:A,E,F,L
  8.  
  9. E:B,C,D,M,L
  10.  
  11. F:A,B,C,D,E,O,M
  12.  
  13. G:A,C,D,E,F
  14.  
  15. H:A,C,D,E,O
  16.  
  17. I:A,O
  18.  
  19. J:B,O
  20.  
  21. K:A,C,D
  22.  
  23. L:D,E,F
  24.  
  25. M:E,F,G
  26.  
  27. O:A,H,I,J

m.py

  1. #-*-encoding:utf-8-*-
  2. #!/home/hadoop/anaconda2/bin/python
  3. import sys
  4. result = {}
  5. for line in sys.stdin:
  6. line = line.strip()
  7. if len(line)==0:
  8. continue
  9. key,vals = line.split(':')
  10. val = vals.split(',')
  11. result[key] = val
  12. if len(result)==1:
  13. continue
  14. else:
  15. for i in result[key]:
  16. for j in result:
  17. if i in result[j]:
  18. if j<key:
  19. print j+key,i
  20. elif j>key:
  21. print key+j,i

r.py

  1. #-*-encoding:utf-8-*-
  2. import sys
  3. result = {}
  4. for line in sys.stdin:
  5. line = line.strip()
  6. k,v = line.split(' ')
  7. if k in result:
  8. result[k].append(v)
  9. else:
  10. result[k] = [v]
  11. for key,val in result.items():
  12. print key,val

执行的命令

  1. hadoop jar /home/hadoop/hadoop-2.7.2/hadoop-streaming-2.7.2.jar \
  2. -files /home/hadoop/test/m.py,/home/hadoop/test/r.py \
  3. -input GTHY -output GTHYout \
  4. -mapper 'python m.py' -reducer 'python r.py'

执行情况

  1. packageJobJar: [/tmp/hadoop-unjar2310332345933071298/] [] /tmp/streamjob8006362102585628853.jar tmpDir=null
  2. 17/08/31 14:47:59 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.228.200:18040
  3. 17/08/31 14:48:00 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.228.200:18040
  4. 17/08/31 14:48:00 INFO mapred.FileInputFormat: Total input paths to process : 1
  5. 17/08/31 14:48:00 INFO mapreduce.JobSubmitter: number of splits:2
  6. 17/08/31 14:48:01 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1504148710826_0003
  7. 17/08/31 14:48:01 INFO impl.YarnClientImpl: Submitted application application_1504148710826_0003
  8. 17/08/31 14:48:01 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1504148710826_0003/
  9. 17/08/31 14:48:01 INFO mapreduce.Job: Running job: job_1504148710826_0003
  10. 17/08/31 14:48:08 INFO mapreduce.Job: Job job_1504148710826_0003 running in uber mode : false
  11. 17/08/31 14:48:08 INFO mapreduce.Job: map 0% reduce 0%
  12. 17/08/31 14:48:16 INFO mapreduce.Job: map 100% reduce 0%
  13. 17/08/31 14:48:21 INFO mapreduce.Job: map 100% reduce 100%
  14. 17/08/31 14:48:21 INFO mapreduce.Job: Job job_1504148710826_0003 completed successfully
  15. 17/08/31 14:48:21 INFO mapreduce.Job: Counters: 49
  16. File System Counters
  17. FILE: Number of bytes read=558
  18. FILE: Number of bytes written=362357
  19. FILE: Number of read operations=0
  20. FILE: Number of large read operations=0
  21. FILE: Number of write operations=0
  22. HDFS: Number of bytes read=462
  23. HDFS: Number of bytes written=510
  24. HDFS: Number of read operations=9
  25. HDFS: Number of large read operations=0
  26. HDFS: Number of write operations=2
  27. Job Counters
  28. Launched map tasks=2
  29. Launched reduce tasks=1
  30. Data-local map tasks=2
  31. Total time spent by all maps in occupied slots (ms)=11376
  32. Total time spent by all reduces in occupied slots (ms)=2888
  33. Total time spent by all map tasks (ms)=11376
  34. Total time spent by all reduce tasks (ms)=2888
  35. Total vcore-milliseconds taken by all map tasks=11376
  36. Total vcore-milliseconds taken by all reduce tasks=2888
  37. Total megabyte-milliseconds taken by all map tasks=11649024
  38. Total megabyte-milliseconds taken by all reduce tasks=2957312
  39. Map-Reduce Framework
  40. Map input records=27
  41. Map output records=69
  42. Map output bytes=414
  43. Map output materialized bytes=564
  44. Input split bytes=192
  45. Combine input records=0
  46. Combine output records=0
  47. Reduce input groups=69
  48. Reduce shuffle bytes=564
  49. Reduce input records=69
  50. Reduce output records=33
  51. Spilled Records=138
  52. Shuffled Maps =2
  53. Failed Shuffles=0
  54. Merged Map outputs=2
  55. GC time elapsed (ms)=421
  56. CPU time spent (ms)=2890
  57. Physical memory (bytes) snapshot=709611520
  58. Virtual memory (bytes) snapshot=5725220864
  59. Total committed heap usage (bytes)=487063552
  60. Shuffle Errors
  61. BAD_ID=0
  62. CONNECTION=0
  63. IO_ERROR=0
  64. WRONG_LENGTH=0
  65. WRONG_MAP=0
  66. WRONG_REDUCE=0
  67. File Input Format Counters
  68. Bytes Read=270
  69. File Output Format Counters
  70. Bytes Written=510
  71. 17/08/31 14:48:21 INFO streaming.StreamJob: Output directory: GTHYout

最终结果

  1. hadoop@master:~/test$ hadoop fs -text GTHYout/part-00000
  2. BD ['A', 'E']
  3. BE ['C']
  4. BF ['A', 'C', 'E']
  5. BG ['A', 'C', 'E']
  6. BC ['A']
  7. DF ['A', 'E']
  8. DG ['A', 'E', 'F']
  9. DE ['L']
  10. HJ ['O']
  11. HK ['A', 'C', 'D']
  12. HI ['A', 'O']
  13. HO ['A']
  14. HL ['D', 'E']
  15. FG ['A', 'C', 'D', 'E']
  16. LM ['E', 'F']
  17. KO ['A']
  18. AC ['D', 'F']
  19. AB ['C', 'E']
  20. AE ['B', 'C', 'D']
  21. AD ['E', 'F']
  22. AG ['C', 'D', 'E', 'F']
  23. AF ['B', 'C', 'D', 'E', 'O']
  24. EG ['C', 'D']
  25. EF ['B', 'C', 'D', 'M']
  26. CG ['A', 'D', 'F']
  27. CF ['A', 'D']
  28. CE ['D']
  29. CD ['A', 'F']
  30. IK ['A']
  31. IJ ['O']
  32. IO ['A']
  33. HM ['E']
  34. KL ['D']

突然发现代码中居然一句注释都没有。果然自己还是太辣鸡,还没养成好习惯。

由于刚接触大数据不久,对java不熟悉,摸索地很慢。希望python的轻便能助我在大数据的世界探索更多。

有错的地方还请大佬多多指出~

python版mapreduce题目实现寻找共同好友的更多相关文章

  1. python版 mapreduce 矩阵相乘

    参考张老师的mapreduce 矩阵相乘. 转载请注明:来自chybot的学习笔记http://i.cnblogs.com/EditPosts.aspx?postid=4541939 下面是我用pyt ...

  2. Han Xin and His Troops(扩展中国剩余定理 Python版)

    Han Xin and His Troops(扩展中国剩余定理 Python版) 题目来源:2019牛客暑期多校训练营(第十场) D - Han Xin and His Troops 题意:   看标 ...

  3. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  4. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

  5. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

  6. python版恶俗古风自动生成器.py

    python版恶俗古风自动生成器.py """ python版恶俗古风自动生成器.py 模仿自: http://www.jianshu.com/p/f893291674c ...

  7. LAMP一键安装包(Python版)

    去年有出一个python整的LAMP自动安装,不过比较傻,直接调用的yum 去安装了XXX...不过这次一样有用shell..我也想如何不调用shell 来弄一个LAMP自动安装部署啥啥的..不过尼玛 ...

  8. 编码的秘密(python版)

    编码(python版) 最近在学习python的过程中,被不同的编码搞得有点晕,于是看了前人的留下的文档,加上自己的理解,准备写下来,分享给正在为编码苦苦了挣扎的你. 编码的概念 编码就是将信息从一种 ...

  9. Zabbix 微信报警Python版(带监控项波动图片)

    #!/usr/bin/python # -*- coding: UTF- -*- #Function: 微信报警python版(带波动图) #Environment: python import ur ...

随机推荐

  1. 修改tomcat编码方式

    打开server.xml <Connector URIEncoding="UTF-8" connectionTimeout="20000" port=&q ...

  2. 为什么不需要为Python对象添加 getter 和 setter

    Getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和setter函数以供外部使用. 这样做的好处是属性的具体实现被隐藏, ...

  3. JavaScript中的几种继承方式对比

    转自:http://blog.csdn.net/kkkkkxiaofei/article/details/46474069 从’严格’意义上说,JavaScript并不是一门真正的面向对象语言.这种说 ...

  4. (转)volatile关键字

    Java线程:volatile关键字   Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量 ...

  5. (转) Spring Boot MyBatis 连接数据库

    最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,Github上有代码:https://gi ...

  6. [BZOJ 2500] 幸福的道路

    照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 368  Solved: 145[Submit][Sta ...

  7. 浅谈jQuery Pagination Ajax 分页插件的使用

    插件介绍 此插件是jQuery的ajax分页插件.分页切换时无刷新也无延迟,因为是一次性加载的.如果你用到此插件作分页的时候,涉及到的数据量大,建议不要使用此插件,因为加载慢会导致用户体验不好! 插件 ...

  8. 【整理】01. jQuery.Form.js 用法分析

    前言: 为什么使用JQuery.From.js,因为原生<form>表单没有回调函数,不过可以通过jquery-form.js这个插件来实现回调函数. jQuery.form.js是一个f ...

  9. 亚马逊AWS EC2云实例AMI安装LNMP环境(2)——PHP5.6

    概括:这里选择亚马逊EC2的Linux AMI实例,该Linux服务器是亚马逊预配置的Linux环境,内置多个YUM源,属于亚马逊首推的稳定Linux服务器.默认登录用户名为ec2-user,执行ro ...

  10. Python爬虫初学(三)—— 模拟登录知乎

    模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...