练习
案例1:map filter
map:所有数据按照map中的参数对应的函数来处理并产生一个新的RDD
filter:所有数据按照map中的参数对应的函数(必须存在返回boolean的函数)来处理,并产生一个新的RDD
rdd1 = sc.parallelize([1,2,3,4,5])
rdd2 = rdd1.map(lambda x:x*2)
rdd3 = rdd2.filter(lambda x:x>3)
rdd3.collect()
案例2:flatMap
flatMap:和map类似,但是传入一个数据,返回多个数据
rdd1 = sc.parallelize([“a b c”,“d e f”,“h i j”])
rdd2 = rdd1.flatMap(lambda x:x.split(" "))
rdd2.collect()
案例3:交集、并集
union:对两个RDD求并集
intersection:对两个RDD求交集
rdd1 = sc.parallelize([(“a”,1),(“b”,2)])
rdd2 = sc.parallelize([(“c”,1),(“b”,3)])
rdd3 = rdd1.union(rdd2)
rdd3.collect()
rdd4 = rdd1.intersection(rdd2)
rdd4.collect()
案例4:groupByKey
groupByKey:以元组中的第0个元素作为key,进行分组,返回一个新的RDD
rdd1 = sc.parallelize([(“a”,1),(“b”,2)])
rdd2 = sc.parallelize([(“c”,1),(“b”,3)])
rdd3 = rdd1.union(rdd2)
rdd3.collect()
rdd4 = rdd3.groupByKey()#返回的元组中第1个元素是可迭代对象,需要进一步遍历才能得到结果
rdd4.collect()
案例5:reduce
reduce:所有数据都需要针对当前函数参数对应的函数进行处理,直接得到一个结果
rdd1 = sc.parallelize([1,2,3,4,5])
rdd1.reduce(lambda a,b:a+b)
案例6:reduceByKey、sortByKey
reduceByKey:所有数据都需要针对当前函数参数对应的函数进行处理,直接得到一个结果(需要有一个key作为基准,求value的和)
sortByKey:所有数据都需要针对当前函数参数对应的函数进行排序处理,直接得到一个结果(需要有一个key作为基准,求value的和)
rdd1 = sc.parallelize([(“a”,1),(“b”,2)])
rdd2 = sc.parallelize([(“c”,1),(“b”,3)])
rdd3 = rdd1.union(rdd2)
rdd4 = rdd3.reduceByKey(lambda a,b:a+b)
rdd4.collect()
rdd5 = rdd4.sortByKey(ascending=False)
rdd5.collect()
rdd6 = rdd4.map(lambda x:(x[1],x[0])).sortByKey(ascending=False).map(lambda x:(x[1],x[0]))
rdd6.collect()