Spark大数据分与实践笔记(第三章 Spark RDD 弹性分布式数据集-02)

本文深入探讨Spark中的RDD处理,包括转换算子如filter、map、flatMap、groupByKey和reduceByKey,以及行动算子如count、first、take、reduce和collect等。RDD采用惰性计算,只有在行动算子触发时才执行计算。
摘要由CSDN通过智能技术生成

第三章 Spark RDD 弹性分布式数据集

3.3 RDD的处理过程

Spark用Scala语言实现了RDD的API,程序开发者可以通过调用API对RDD进行操作处理。下面,通过一张图来描述RDD的处理过程。
在这里插入图片描述

RDD经过一系列的"转换”操作,每一次转换都会产生不同的RDD,以供给下一次转换”操作使用,直到最后一个RDD经过“行动”操作才会被真正计算处理。
需要注意的是,RDD采用了惰性调用,即在RDD的处理过程中,真正的计算发生在RDD的"行动”操作,对于"行动"之前的所有"转换"操作,Spark只是记录下“转换”操作应用的一些基础数据集以及RDD相互之间的依赖关系,而不会触发真正的计算处理。

3.3.1 转换算子

RDD处理过程中的"转换"操作主要用于根据已有RDD创建新的RDD,每一次通过转换算子计算后都会返回一个新RDD,供给下一个转换算子使用。

转换算子 相关说明
filtier(func) 筛选出满足函数func的元素,并返回一个新的数据集
map(func) 将每个元素传递到函数func中,返回的结果是一个新的数据集
flatMap(func) 与map()相似,但是每个输入的元素都可以映射到0或者多个输出结果
groupByKey() 应用于(Key,Value)键值对的数据集时,返回一个新的 (Key,lterable )形式的数据集
reduceByKey(func) 应用于(Key,Value)键值对的数据集时,返回一个新的(Key,Value)形式的数据集。其中,每个Value值是将每个Key键传递到函数func中进行聚合后的结果

下面,我们通过结合具体的示例对这些转换算子API进行详细讲解。
● filter(fune)
filter(func)操作会筛选出满足函数func的元素,并返回一个新的数据集。假设,有一个文件test.txt(内容如文件3-1),下面,通过一张图来描述如何通过filter算子操作,筛选出包含单词“spark”的元素。
在这里插入图片描述

通过从test.txt文件中加载数据的方式创建RDD,然后通过filter操作筛选出满足条件的元素,这些元素组成的集合是—个新的RDD。接下来,通过代码来进行演示,具体代码如下:

scala> val lines=sc.textFile("file:///export/data/test.txt")
lines: org.apache.spark.rdd.RDD[String] = file:///export/data/test.txt MapPartitionsRDD[6] at textFile at <console>:24

scala> val linesWithSpark=lines.filter(line=>line.contains("spark"))
linesWithSpark: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[7] at filter at <console>:25

演示一下:

  1. 进入到hadoop01,进入/export/data目录
    在这里插入图片描述

  2. 修改test.txt文件的内容与源数据保持一致(vi test.txt)。
    在这里插入图片描述

  3. 进入到spark shell(参考之前的启动)。

  4. 加载文件并产生RDD.
    在这里插入图片描述

● map(func)
map(func)操作将每个元素传递到函数func中,并将结果返回为一个新的数据集。假设,有一个文件test.txt,接下来,通过一张图来描述如何通过map算子操作把文件内容拆分成一个个的单词并封装在数组对象中,具体过程如图3-3所示。
在这里插入图片描述

通过从test.txt文件中加载数据的方式创建RDD,然后通过map操作将文件的每一行内容都拆分成一个个的单词元素,这些元素组成的集合是一个新的RDD。接下来,通过代码来进行演示,具体代码如下:

scala> val lines=sc.textFile("file:///export/data/test.txt")
lines: org.apache.spark.rdd.RDD[String] = file:///export/data/test.txt MapPartitionsRDD[9] at textFile at <console>:24

scala> var words=lines.map(line=>line.split(" "))
words: org
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妉妉师姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值