MapReduce是一种函数式编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。

  Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

  然而在python中,map就是 :将一个函数映射到所有可枚举类型上,reduce就是归约。

  1. #map/reduce
  2.  
  3. from functools import reduce
  4. print(list(map(str,[-1,-2,-3,-4,-5])))
  5. def fn(x, y):
  6. print(x, y)
  7. return x*10 + y
  8. r = reduce(fn,[1,3,5,7,9])
  9. print(r)
  10.  
  11. def func_sum(x, y):
  12. return x + y
  13. def square(x):
  14. return x*x
  15. list_r = map(square,[-1,-2,-3,-4,-5])
  16. ll_r = list(list_r)
  17. print('r = ',ll_r)
  18. ans = reduce(func_sum, ll_r)
  19. print('sum is ',ans)
  20.  
  21. def add_100(a, b, c):
  22. print(a,b,c)
  23. return a * 10000+ b *100 + c
  24. list1 = [11,22,33]
  25. list2 = [44,55,66]
  26. list3 = [77,88,99]
  27. rec = map(add_100,list1, list2, list3)
  28. print(list(rec))
  29.  
  30. from functools import reduce
  31. def fn(x, y):
  32. print(x, y)
  33. return x * 10 + y
  34. def char2num(s):
  35. return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
  36. '''{} is a dictionary, [] is index of dict, so [key] return value'''
  37. print(reduce(fn, map(char2num, '')))
  38.  
  39. def str2int(s):
  40. def fn(x, y):
  41. return x * 10 + y
  42. def char2num(s):
  43. return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
  44. return reduce(fn, map(char2num, s))
  45. print(str2int(''))
  46. print(int(''))
  47. print(str(13572))
  48.  
  49. def str2int_(s):
  50. def char2num(s):
  51. return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
  52. return reduce(lambda x,y: x * 10 + y, map(char2num, s))
  53. '''lambda 匿名函数,有些简单函数只需要用1次,所以不给起名字'''
  54. print(str2int_(''))
  55.  
  56. #联系
  57. #1 规范化英文名
  58. def normalize(name):
  59. return name.capitalize()
  60. L1 = ['adam', 'LISA', 'barT']
  61. L2 = list(map(normalize, L1))
  62. print(L2)
  63. #2 请编写一个prod()函数,可以接受一个list并利用reduce()求积:
  64. from functools import reduce
  65. def prod(L):
  66. return reduce(lambda x,y : x * y, L)
  67. print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))
  68. #3 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:
  69. from functools import reduce
  70. def str2float(s):
  71. def char2num(s):
  72. return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
  73. pos = s.find('.')
  74. s_num = s.split('.')[0] + s.split('.')[1]
  75. print(pos, s_num)
  76. L = reduce(lambda x,y : x * 10 + y, map(char2num, s_num))
  77. return L/ math.pow(10, pos)
  78. print('str2float(\'123.456\') =', str2float('123.456'))
  79. #Another solution
  80. def str2float_(s):
  81. def char2num(s):
  82. return {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}[s]
  83. a, b = s.split('.')
  84. L = reduce(lambda x,y: x * 10 + y, map(char2num, a + b))
  85. return L/10**len(b)
  86. print('str2float(\'123.456\') =', str2float('123.456'))

  以上代码都是liaoxuefeng教程中的内容实现和练习题。

Python中的Map/Reduce的更多相关文章

  1. python中lambda,map,reduce,filter,zip函数

    函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...

  2. Python中 filter | map | reduce | lambda的用法

      1.filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tupl ...

  3. python 中的map(), reduce(), filter

    据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法. 简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数: I ...

  4. Python 中的 map, reduce, zip, filter, lambda基本使用方法

    map(function, sequence[, sequence, ...] 该函数是对sequence中的每个成员调用一次function函数,如果参数有多个,则对每个sequence中对应的元素 ...

  5. Python中的map()函数和reduce()函数的用法

    Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下   Py ...

  6. Python高级教程-Map/Reduce

    Python中的map()和reduce() Python内建了map()和reduce()函数. map() map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每 ...

  7. python 中的map 详解

    python中的map函数应用于每一个可迭代的项,返回的是一个结果list.如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理.map()函数接收两个参数,一个是函 ...

  8. python中的map()函数

    MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下. 文档中的介绍在这里: map(function, iterable, .. ...

  9. js中map和python中的map

    js 中的map: 由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow( ...

随机推荐

  1. codeforces 373 A - Efim and Strange Grade(算数模拟)

    codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...

  2. Spring 源码学习(一)

    工作好多年了,越来越心浮气躁了,好多东西都是一知半解的,所以现在需要静下心来好好学习一门技术. 就选Spring了, spring 设计java 开发的方方面面. 期待目标 对Spring 有个更深层 ...

  3. 【Codeforces 411A】Password Check

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 傻逼模拟题 [代码] import java.io.*; import java.util.*; public class Main { st ...

  4. JavaSE 学习笔记之API(二十一)

    API--- java.lang.Runtime: 类中没有构造方法,不能创建对象. 但是有非静态方法.说明该类中应该定义好了对象,并可以通过一个static方法获取这个对象.用这个对象来调用非静态方 ...

  5. Inversion

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4176   Accepted: 1857 Description The i ...

  6. my first emacs custom key binding

    (defun comment-this-level ()  (interactive)  (move-beginning-of-line 1)  (set-mark-command nil)  (fo ...

  7. Ubuntu 16.04安装PPA图形化管理工具Y PPA Manager

    安装: sudo add-apt-repository ppa:webupd8team/y-ppa-manager sudo apt-get update sudo apt-get install y ...

  8. Angularjs中添加HighCharts

    一. 添加基本配置 1. 添加指令 angular.module('newApp') .directive('dpHighchart', ['$rootScope', function($rootSc ...

  9. 【python】range的用法

    range的用法: >>> range(1,5) #代表从1到5(不包含5)[1, 2, 3, 4]>>> range(1,5,2) #代表从1到5,间隔2(不包含 ...

  10. C++学习之new与delete、malloc与free

    在C/C++的面试时,对于new/delete和malloc/free这两对的使用和区别经常被考查到,如果这种基础的问题都答不上来,估计很难过面试了.这篇文章仅仅是浅显的讲一下,仅供参考. 一.new ...