mapreduce(pyspark)

本人刚接触spark,最先学的就是map-reduce,跟大家分享一下对map-reduce的理解。

1.Map

首先是map,我认为map就是对数据列的处理:抽取或者添加列,下边是例子:

1.1 提取

rdd1是某用户数据,我们想提取其中的几列用来做分析,先看一下rdd1
的数据

print rdd1.take(1)

打印结果:[(u’id_first’, u’001’, u’300’,u’ios’ )]
欲取第一列和第三列,则:

def map_example(row):
    return(row[0],row[2])
rdd_mapped=rdd1.map(map_example)
print rdd_mapped.take(1)

打印结果:(u’id_first’, u’300’ )

1.2 添加

同样使用rdd1,对第四列是ios的用户标注1

def map_example2(row):
    if row[3]=="ios":
        return(row,1)
rdd_mapped2=rdd1.map(map_example2)
print rdd_mapped2.take(1)

打印结果:[(u’id_first’, u’001’, u’300’,u’ios’,1) ]

2.Reduce

2.1 reduce

reduce将RDD中元素两两传递给输入函数,同时产生一个新的值,新产生的值与RDD中下一个元素再被传递给输入函数直到最后只有一个值为止,下边是例子:

rdd2=[[0,1,0,0,0]]
def reduce_example(x, y):
    count=list([0 for i in range(5)])
    for i in range(5):
        count[i]=x[i]+y[i]
    return count
rdd2_reduced = rdd2.reduce(reduce_example)
print rdd2_reduced 

打印结果是个list:[54, 34, 26, 4, 0]

2.2 reduceByKey

如果rdd2为:rdd2=[("id_second",(0,1,0,0,0))]

rdd2_reduced2 = rdd2.reduceByKey(reduce_example)
print rdd2_reduced 

打印结果:[(“id_second”,(4, 5, 3, 4, 0))]
结果是每个key的归并和,但是reduceByKey操作的一定是pairrdd。

猜你喜欢

转载自blog.csdn.net/weixin_40678266/article/details/81983291