大数据-玩转数据-Spark-RDD编程基础-RDD操作(python版)

本文介绍了Spark中RDD的基础操作,包括转换(Transformation)如filter、map、flatMap、groupByKey,以及行动(Action)如count、collect、first、take和reduce。RDD的惰性机制确保了转换仅记录操作轨迹,直到行动操作时才执行计算。

大数据-玩转数据-Spark-RDD编程基础-RDD操作(python版)

RDD操作包括两种类型:转换(Transformation)和行动(Action)
1、转换操作
RDD每次转换操作都会都会产生新的RDD,供下一转换或行动使用,所以叫惰性求值,转换只记录了轨迹,不执行,行动才执行。
常用的RDD转换操作API
filter(func) : 筛选出满足func函数的元素,并返回一个新的数据集
map(func):将每个元素传递到函数func中,并将结果返回已个新的数据集
flatMap(func):与map(func)相似,但每个输入元素都可映射到0或多个输出结果
groupByKey():应用到键值对的数据集时,返回一个新的(K,Iterable)形式的数据集
reduceByKey(func):应用于(K,V)键值对的数据集时,返回一个新的键值对的数据集(K,V),其中每个值都是将每个key传递到func中进行聚合后的集合

(1)、filter(func)

>>> lines = sc.textFile("file:///home/hadoop/temp/word.txt")
>>> linesWithSpark = lines.filter(lambda line:"Spark" in line)
>>> linesWithSpark.foreach(print)

在这里插入图片描述
(2)、map(func)

data = [1,2,3,4,5]
rdd1 = sc.parallelize(data)
rdd2 = rdd1.map(lambda x:x+1)
rdd2.foreach(print)

在这里插入图片描述

>>> lines = sc.textFile("file:///home/hadoop/temp/word.txt")
>>> words = lines.map(lambda line:line.split(" "))
>>> words.foreach(print)

在这里插入图片描述
(3)、flatMap(func)

>>> lines = sc.textFile("file:///home/hadoop/temp/word.txt")
>>> words = lines.flatMap(lambda line:line.split(" "))
>>> words.foreach(print)

在这里插入图片描述
(4)、groupByKey()

>>> words = sc.parallelize([("Hadoop",1),("is",1),("good",1),("Spark",1),("is",1),("fast",1),("Spark",1),("is",1),("better",1)])
>>> words1 = words.groupByKey()
>>> words1.foreach(print)

在这里插入图片描述
上面值得到新的RDD
(“Hadoop”,1) (“is”,1,1,1) (“Spark”,1,1) (“good”,1)
("“fast”,1) (“better”,1)

(4)、groupByKey()

>>> words = sc.parallelize([("Hadoop",1),("is",1),("good",1),("Spark",1),("is",1),("fast",1),("Spark",1),("is",1),("better",1)])
>>> words1 = words.reduceByKey(lambda a,b:a+b)
>>> words1.foreach(print)

在这里插入图片描述
2、行动操作
行动操作是真正触发运算的地方
常用的RDD行动操作API
count() : 返回数据集中元素的个数
collect() : 以数组的形式返回数据集中的所有元素
first() : 返回数据集中第一个元素
take(n) : 以数组的形式返回数据集中前n个元素
reduce(func) : 通过函数func(输入两个参数,返回一个值)聚合数据集中的元素
foreach(func) : 将数据集中的每个元素传递到func中运行

>>> rdd = sc.parallelize([1,2,3,4,5])
>>> rdd.count()
5
>>> rdd.first()
1
>>> rdd.take(3)
[1, 2, 3]
>>> rdd.reduce(lambda a,b:a+b)
15
>>> rdd.collect()
[1, 2, 3, 4, 5]
>>> rdd.foreach(lambda elem:print(elem))
1
2
3
4
5
>>> 

3、RDD的惰性机制

>>> words = sc.parallelize([("Hadoop",1),("is",1),("good",1),("Spark",1),("is",1),("fast",1),("Spark",1),("is",1),("better",1)])
>>> lineLengths = lines.map(lambda s:len(s))
>>> totalLength = lineLengths.reduce(lambda a,b:a+b)
>>> print(totalLength)
42
>>> 

步骤1,2都是记录转换关系,3开始真正计算,4然后打印3的结果RDD

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值