开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Rdd 算子_转换_回顾】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/11966
Rdd 算子_转换_回顾
内容介绍:
一、序言
二、map
三、flatmap
四、reduce-by-key
五、回顾
一、序言
本章节将去了解转换操作中涉及到的一些算子,这一部分算子会偏多,大部分都是这些算子。
二、Map
Map 是一个转换操作,作用是对rdd的数据一对一转换成不同数据,下面是一个小案例。
scala>:paste
/ 1Entering paste mode (ctrl-D to finish)
sc.parallelize(Seq(1,2,3))
.map( num =>num 10)
.collect()
/ /Exiting paste mode, now interpreting.res0:Array[Int]= Array(10, 20, 30)
首先创建了一个列表,接下里使用 map 操作,将数据都乘10,最终用 collect 后,返回的 array 是10 20 30。所以map 的大致逻辑是通过定义来控制操作的基调。
这个转换就是通过 map 定义的,那么转换规则是是 map 里面所接收的这些函数来定义的。
所以一个算子有两大部分组成,一部分是这个算子本身所表达的那个最深层的翻译,然后是通过后面所给出的这个函数来进行实现的,就是一对一的去把一个数据的形式转成另外一种形式。
三、Flatmap
Flatmap 和 map 区别是一对多的,首先这两个单词的意思不一样,其实里面接收到的东西可以都是函数,但是他们从最深层的意义上是不一样的,那就是一个是一对一的转换,一个是一对多的转换,一个算子有两部分组成,第一部分呢是算子本身所表达出来的那个功能,其次通过里面接收的这个函数来进行实现这个功能,规则有函数来定义。
下面这个案例当中就是使用 parallelize 生成一个 rdd 里面存放 Hello lily""Hello lucy","Hello tim’’,接下来使用flat map 把其中的每一个字符串按照空格来进行拆分,并且展开形成 Hello, lily, Hello,lucy,Hallo,tim 这样的一个散装的这样的一个每个单词都是一个条目的这样的一种形式,所以一个 hello lily,这部分对应的结果是一个 hello 和一个Lily,所以是一对多。
scala> :paste
// Entering paste mode (ctrl-D to finish)
sc.parallelize(Seq "Hello lily""Hello lucy","Hello tim" flatMapk line=>line.split(
.collect()
/ /Exiting paste mode, now interpreting.
res1:Array[String]= Array(Hello, lily, Hello,lucy,Hallo,tim)
四、reduce by key
Reduce bey 的含义,第一点通过 reduce key 的含义,就定义了接下来要进行的操作首先是 reduce,要按照 key3来定义。将 reduce 进行相加、相乘、相除,还是相减,这个规则通过函数来定义。
所以算子分为两部分,第一个是算子本身那个方法定义的功能,第二个是这个函数定义的规则,所以 reduce by key就是按照 key 相同的两个算子进行规约。
scala>:paste
// Entering paste mode (ctrl-D to finish)
sc.parallelize(Seq(("a",1),("a",1), ("b",1)))
reduceByKey (curr,agg) => curr + agg)
.colrecto
// Exiting paste mode, now interpreting.
res13: Array[(String, Int)] = Array((b,1), (a,2))
五、回顾
算子的方法例如 map flatmap reduce by-key,方法名规定了功能,算子传入的函数规定了规则。