spark常用RDD算子

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进行自定义分区操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值