RDD 算子_ KV 类型的支持 | 学习笔记

简介: 快速学习 RDD 算子_ KV 类型的支持

开发者学堂课程【大数据Spark2020最新课程(知识精讲与实战演练)第二阶段RDD 算子_ KV 类型的支持学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/11985


RDD 算子_ KV 类型的支持


内容介绍

一、前言

二、数据类型划分

三、 keyValue 型数据的 Spark 支持


一、前言

在之前的学习中,我们已经了解了转换算子和 action 算子。我们把算子按功能进行分类,可分为两类,即转换算子(Transformation )和动作算子( Action )。

转换算子是惰性的,通过转换算子,可以表现出 RDD 之间的依赖关系,RDD 的生成,以及  Computer 函数所做的事情。动作算子是在转换算子生成 RDD 链条后,执行命令,然后调度到集群里,求得最终结果。


二、数据类型划分

按照存放在 RDD 当中的数据类型来看,大致可分为三类。第一类是比较基本的数据类型,不可再细分的、序列化的、整体的数据类型,比如说String 和对象类型。

第二类是与 Key Value数据相关的,我们称之为 KV 类型,它可再分,有较明显的规律。

第三类称为数字类型,里面基本上存放的都是一些数字。处理基本类型的算子也可以去处理keyValue 型和数字型,但 keyValue 型和数字型也有自己的特点。 keyValue 型数据可以按照 Key 进行多种运算,数字型的可以用于求均值、中数等数据。

 

三、 keyValue 型数据的 Spark 支持

本期主要讲 keyValue 型数据的 Spark 支持,我们直接进入到代码当中,打开 idea ,找到 TransformationOp ,然后找到 groupByKey 算子。

如果将这个算子分开,第一行代码将会生成 RDD 数据。 RDD 调用 groupByKey 生成了 RDD1 数据, RDD1 调用了collect ,又生成了 RDD2 ,然后对 RDD2 进行打印求值,这是一个大致的流程。

然后我们增加一下 RDD1 RDD2 的类型信息。这里的 collect

RDD类型的,而这个 groupByKey 却是 PairRDDFunctions 类型

的。PairRDDFunctions Spark 专门用于支持 KV 类型数据的计

算,也就是说所有的 byKey 方法都是 PairRDDFunctions 里的方法,

这可能有点违背大家的认知了。我们可以在 RDD 中搜索

PairRDDFunctions 的方式,在 Object 中,也就是伴生对象中,可以

找见 implicit ,是一个隐式转换。

1.png

也就是说一个 keyValue 型的 RDD

会自动转成一个 PairRDDFunctions 类型的 RDD 。这是 keyValue

型数据支持的一个简单的说明。

Spark 提供的支持有以下几类。

首先是聚合操作,这是 keyValue 型中较常见的操作,像 reduceByKey 就是;然后是分组操作, cogroup 没有说过,但也不是特别的常见,groupByKey 较为常见;连接操作对应的 join 等;排序操作就是 sortBy sortByKey ;部分 Action

也是专门为 Key 准备的, countByKey 也可以对 Key 进行一些收集。 countByKey 是专门用于 keyValue 型数据的 Action 算子。

1.png

接下来我们找一些代码来验证一下 countByKey 。可以看到的是 countByKey 在 PairRDDFunctions 类别中,只有当 RDD 类型是 KV 型的数据时,才会转到 PairRDDFunctions 这里。简单来看一下,在 RDD 中是可以调用 countByKey 的,但是如果换成 sc.parallelize ,随便生成一个类型的数据,可以发现这里面没有 countByKey 了,就只有一个 countByValue ,这是需要大家注意的地方,这就是 keyValue 型数据的 Spark 支持。

相关文章
|
11月前
|
存储 分布式计算 并行计算
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
|
11月前
|
存储 分布式计算 对象存储
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
122 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
分布式计算 大数据 Spark
Rdd 算子_转换_回顾 | 学习笔记
快速学习 Rdd 算子_转换_回顾
56 0
Rdd 算子_转换_回顾 | 学习笔记
|
分布式计算 算法 大数据
Rdd 算子_转换_mapvalues | 学习笔记
快速学习 Rdd 算子_转换_mapvalues
107 0
Rdd 算子_转换_mapvalues | 学习笔记
|
分布式计算 大数据 Scala
RDD 算子_转换_ foldByKey | 学习笔记
快速学习 RDD 算子_转换_ foldByKey
136 0
RDD 算子_转换_  foldByKey | 学习笔记
|
分布式计算 算法 大数据
RDD 算子_转换_ combineByKey | 学习笔记
快速学习 RDD 算子_转换_ combineByKey
111 0
RDD 算子_转换_ combineByKey | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换_ aggregateByKey | 学习笔记
快速学习 RDD 算子_转换_ aggregateByKey
93 0
RDD 算子_转换_ aggregateByKey | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换 join | 学习笔记
快速学习 RDD 算子_转换 join
88 0
RDD 算子_转换 join | 学习笔记
|
分布式计算 大数据 Spark
RDD 算子_转换_排序 | 学习笔记
快速学习 RDD 算子_转换_排序
76 0
RDD 算子_转换_排序 | 学习笔记