map算子
定义:将RDD的数据一条条处理,返回新的RDD
语法:
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd=sc.parallelize([1,2,3,4,5,6],3) #定义方法,作为算子的传入函数体 def add(data): return data*10 print(rdd.map(add).collect()) #使用匿名函数lambda表达式来写匿名函数 print(rdd.map(lambda data :data*10).collect())
运行结果:
flatmap算子-Transformation
功能:对RDD执行map操作,然后进行解除嵌套操作
#解除嵌套:
初始list:lst=[[1,2,3],[4,5,6,]]
解除嵌套:lst=[1,2,3,4,5,6]
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd=sc.parallelize(["hadoop hello hadoop","spark spark hadoop","word hadoop spark"]) rdd2=rdd.flatMap(lambda line:line.split(" ")) print(rdd2.collect())
运行结果:
reduceByKey算子-Transformation
功能:针对KV型RDD,自动按照key分组,然后根据你提供的聚合逻辑,完成组内数据(value)的聚合操作
用法:
rdd.reduceByKey(func)
#func:(V,V)->V
#接受2个传入参数(类型要一致),返回一个返回值,类型要和传入一样
reduceByKey中的聚合逻辑解析
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd=sc.parallelize([('a',1),('s',1),('a',1),('b',1),('b',1)]) rdd2=rdd.reduceByKey(lambda a,b:a+b) print(rdd2.collect())
运行结果:
mapValues算子-Transformation
功能:针对二元元组,对其内部的二元元组的value执行map操作
group By算子-Transformation
功能:将RDD的数据进行分组
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd=sc.parallelize([('a',1),('s',1),('a',1),('b',1),('b',1)]) #groupBy传入的函数的意思是:通过这个函数确定按照谁来分组(返回谁即可) rdd2=rdd.groupBy(lambda t: t[0]) rdd2=rdd2.map(lambda t:(t[0],list(t[1]))) print(rdd2.collect())
运行结果:
Filter-Transformation
功能:过滤 想要的数据进行保留
rdd.filter(func)
#func:(T)->bool 传入1个参数进来,返回值必须是True or false
返回值是True的数据被保留,反之被遗弃
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd=sc.parallelize([1,5,8,6,9,4,3]) #groupBy传入的函数的意思是:通过这个函数确定按照谁来分组(返回谁即可) rdd2=rdd.filter(lambda x:x%2==1) print(rdd2.collect())
运行结果:
distinct算子-Transformation
功能:对RDD数据进行去重
rdd.distinct(参数1)
#参数1,去重分区数量,一般不用传
union算子 -Transformation
功能:2个RDD合并成1个RDD(只合并不去重)
用法:rdd.union(other_rdd)
####join算子-Transformation
功能:对两个RDD执行JOIN操作(可实现SQL的内\外连接)
注意:join算子只能用于二元元组
语法:
rdd.join(other_rdd)#内连接
rdd.leftOuterjoin(other_rdd)#左外连接
rdd.rightOuterjoin(other_rdd)#右外连接
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd1=sc.parallelize([(1001,"zhangsan"),(1002,"lisi"),(1003,"wangwu")]) rdd2=sc.parallelize([(1001,"科技部"),(1002,"销售部")]) print(rdd1.join(rdd2).collect())
结果演示:
intersection算子-Transformation
功能:求2个rdd的交集,返回应该新rdd
用法:rdd1.intersection(rdd2)
glom-Transformation
功能:将RDD的数据,加上嵌套,这个嵌套按照分区来进行
比如RDD数据[1,2,3,4,5]有2个分区
那么被glom后数据变成[[1,2,3],[4,5]]
使用方法:rdd.glom()
groupByKey算子-Transformation
功能:针对KV型RDD,自动按照key分组
用法:rdd.groupyByKey()自动按照key分组
sortBy算子-Transformation
功能:对RDD数据进行排序,基于你指定的排序依据
注意:如果要保证全局有序,请保持分区数量为1
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd=sc.parallelize([('e',5),('a',8),('f',2),('c',1),('k',7),('z',4),('a',9),],3) ##使用sortby对rdd进行排序 print(rdd.sortBy(lambda x:x[1],ascending=True,numPartitions=3).collect())
运行结果:
####sortByKey算子-Transformation
功能:针对KV型RDD,按照key进行排序
2.5常用Action算子
countByKey算子-Action
功能:统计key出现的次数(一般适用于KV型RDD)
使用样例:
#conding:uft8 from pyspark import SparkConf,SparkContext if __name__ == '__main__': conf=SparkConf().setMaster("local[*]").setAppName("wordcount") sc=SparkContext(conf=conf) rdd=sc.textFile("../data/words.txt") rdd2=rdd.flatMap(lambda x:x.split(" ")).map(lambda x:(x,1)) result=rdd2.countByKey() print(result)
collect算子-Action
功能:将RDD各个分区内的数据,统一收集到Driver中,形成应该List对象
用法:rdd.collect()
reduce算子-Action
功能:对RDD数据集按照你传入的逻辑进行聚合
语法:
first算子-Action
功能:取出RDD的第一个元素
用法:>>>sc.parallelize([3,2,1]).first 返回3
take算子-Action
功能:取出RDD的前N个元素,组合成list返回
用法:>>>sc.parallelize([1,2,3,4,5,6]).take(5) 返回[1,2,3,4,5]
top算子
功能:对RDD数据集进行降序排序。取前n个
count算子
功能:计算RDD中有多少条数据,返回值是一个数字
takesample算子-Action
功能:随机抽样RDD的数据
takeOrdered算子-Action
功能:对RDD进行排序取前N个
forecch算子-Action
功能:对RDD的每一个元素,执行你提供的逻辑的操作(和map一个意思),但是这个方法没有返回值
saveAsTextFile算子-Action
功能:将RDD的数据写入文本文件中
支持 本地写出,hdfs等文件系统
partitionBy算子-Transformation
功能:对RDD进行自定义分区操作