首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Map和Reduce在Hadoop与Python中有何异同?

Hadoop是一个大数据处理平台,也是一个集群,能够对海量数据进行存储和运算。MapReduce是Hadoop众多组件当中的一个。Hadoop作为一个分布式系统,可以将不同的机器设备连接起来进行存储,也就是人们常说的HDFS,这也是Hadoop的一个构成部分;而hadoop的另一个构成部分就是MapReduce了,前者负责数据的存储,而后者负责数据的运算,而且可以在MapReduce上进行编程开发。

在Hadoop架构中,MapReduce可以分为两个阶段,尚学堂陈老师指出第一阶段为Map阶段,第二阶段为Reduce阶段;Map把调入文件进行切分,映射到不同节点;之后,就是Reduce发生作用,Reduce有些类似于合并同类项,对切分好的数据进行约化,既能起到汇总的效果,还可对数据起到精简整理的作用,从而达到分布式计算的效果。

Hadoop是开源框架,所以可以通过编程用MapReduce分析数据,需要调用函数可以由用户或开发者自由选择。

Python中的Map和Hadoop中的Map本质是一样的,选择一种Python的开源框架同样可以搭建一个简单的分布式系统,也可以通过Map对数据文件进行切分,但过程和Hadoop中的Map是完全不一样的,可以说是两种不同的框架。我们在学习的时候可以进行类比来加深理解即可。

在Python当中,严格的讲并不存在真正意义上的Reduce。Python有丰富的库类,可调用各种函数或其他语言编写的模块对数据进行处理,例如做描述统计的平均数、标准差、方差,推断统计的线性回归、数据透视、假设检验等。在Python当中,这些可以称为聚合分组运算。下面以其中的groupby为例,来进行简要的说明。

首先来看看下面这个非常简单的表格型数据集(以DataFrame的形式):

>>> import pandas as pd

>>> df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],

... 'key2':['one', 'two', 'one', 'two', 'one'],

data1 data2 key1 key2

0 -0.410673 0.519378 a one

1 -2.120793 0.199074 a two

2 0.642216 -0.143671 b one

3 0.975133 -0.592994 b two

4 -1.017495 -0.530459 a one

假设你想要按key1进行分组,并计算data1列的平均值,我们可以访问data1,并根据key1调用groupby:

>>> grouped = df['data1'].groupby(df['key1'])

>>> grouped

变量grouped是一个GroupBy对象,它实际上还没有进行任何计算,只是含有一些有关分组键df['key1']的中间数据而已,然后我们可以调用GroupBy的mean方法来计算分组平均值:

>>> grouped.mean()

key1

a -1.182987

b 0.808674

dtype: float64

可见,Python和Hadoop中的Reduce的不同在于Python需要根据Key进行分组,用户根据需要调用相应函数;而Hadoop的Reduce过程要更加灵活,既可以通过编程的方法来实现,也可以直接用Hive进行SQL操作。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180227A0LZ3800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券