算法丨MapReduce
Posted One丨Python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法丨MapReduce相关的知识,希望对你有一定的参考价值。
MapReduce
有一种特殊的并行算法正越来越流行,它就是分布式算法。在并行算法只需要两到四个内核时,完全可以在笔记本电脑上运行它,但如果需要数百个内核呢?
在这种情况下,可让算法在多台计算机上运行。MapReduce是一种流行的分布式算法,可以通过流行的开源工具,Apache Hadop来使用它。
映射函数
映射函数很简单,他接受一个数组,并对其中的每个元素执行同样的处理。例如,下面的映射将数组的每个元素翻倍。
arr1 = [1, 2, 3, 4, 5]
arr2 = map(lambda x: 2 * x, arr1)
print(arr2)
[2, 4, 6, 8, 10]
arr2包含[2, 4, 6, 8, 10],将数组arr1的每个元素都翻倍!将元素翻倍的速度非常快,但如果要执行的操作需要更长时间呢?
# 伪代码
arr1 = # A list of URLs
arr2 = map(download_page, arr1)
在这个示例中,有一个URL清单,需要下载每个URL指向的页面并将这些内容存储在数组arr2中。
对于每个URL,处理起来都可能需要几秒钟。如果总共有1000个URL,可能耗时几小时!
如果有100台计算机,而map能够自动将工作分配给这些计算机去完成就好了。这样就可同时下载100个页面,下载速度将快得多!这就似乎MapReduce中“映射”部分基本的理念。
归并函数
归并函数可能令人迷惑,其理念是将很多项归并为一项。映射是将一个数组转换为另一个数组。而归并是将一个数组转换为一个元素。
arr1 = [1, 2, 3, 4, 5]
arr2 = reduce(lambda x, y: x + y, arr1)
print(arr2)
15
在这个示例中,将数组中的所有元素相加:1+2+3+4+5=15!
MapReduce使用这两个简单概念在多台计算机上执行数据查询。数据集很大,包含数十亿行时,使用MapReduce只需几分钟就可获得查询结果,而传统数据库可能要耗费数小时。
以上是关于算法丨MapReduce的主要内容,如果未能解决你的问题,请参考以下文章
Nature 亮点丨精确预测蛋白结构可以依赖Google吗?DeepMind团队开发新型深度学习算法精确预测蛋白结构
统一观测丨使用 Prometheus 监控 E-MapReduce,我们该关注哪些指标?