开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:有类型转换_split_】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12071
有类型转换_split_
再去了解一个类型的算子操作,叫做切分,切分,其实说了两件事,第一件事儿就是把一个数据集切为多个数据集,还有一个事情,其实说的就是如何从一个数据集当中抽出一个比较小的数据集。
接下来,进行这一个步骤:
def split(): Unit = {
val ds = spark.range(end =15)
//randomsplit 在 rdd 当中是没有的,这个 simple 和 rdd 的当中的稍微有一点区别,但区别其实并不大,所以我们把它放在一起来讲。那么 randomsplit 所实现的功能是什么,在 spark.range(end =15)这个当中是有 15 条元素,那么 randomsplit 就可以按照一定的权重,把你这个数据集给拆为多个数据集。那么其实,需要去控制两件事情,第一个是拆为多少数据集,切多少分,第二个问题是权重多少。
//第一个算子 randomsplit
(val datasets:Array[Dataset[lang.Long]]
=ds.randomSplit(Array(5,2,3))
datasets foreach(_.show)
//调用算子,因为 randomSplit 接收的是一个 Array ,所以把(seq(5,2,3))改为(Array(5,2,3)),这个是随机拆分的,这个 5+2+3 加倍的和可以为 1,100,100,其实都是为 1,无论怎么换算,都是以十为倍数进行换算。如果最终它的这个加倍和不能唯一的话,就会进行一个标准化的一个过程。当然也可以都无所谓啊,看大家怎么去设计。
进行一下 show,查看一下结果,这个时候发现用不了 show,因为 randomSplit 接收的类型是多个 datasets。改为:
val datasets:Array[Dataset[lang.Long]]
=ds.randomSplit(Array(5,2,3))
datasets foreach(_.show)
这个切分成了三份
//第二个算子 sample
ds. Sample(withReplacement = false, fraaction = 0.4).show
//
这个 sample 的用法与前面几乎是一致。在这个 simple 里面,同样接收两个参数,第一个是否有放回,有放回就知道这个结果集当中是否有重复,如果有放回的话,就是采一个样把它放回去下次还能采到样,这个结果集就会有重复,所以加入 withReplacement = false, fraaction = 0.4
运行程序,获取到结果了(图)
首先,第一个运行
(val datasets:Array[Dataset[lang.Long]]
=ds.randomSplit(Array(5,2,3))
datasets foreach(_.show)
会打印出来三个结果。
第二个运行
ds. Sample(withReplacement = false, fraaction = 0.4).show
会打印出来一个结果。
一共四个结果:
第一个结果是 6 条数据,它的权重为 5。
第二个结果是 5 条数据,它的权重为 2。
第三个结果是 2 条数据.
第四个结果是 4 条数据,它的权重为 3。
给的只是权重,而不是具体的数目,所以怎么去打印?怎么去生成这个数据集其实也是人家说了算,比如说当除不尽的时候,它可能不是按照严格的那个大概的比例来的。最后一个 sample,抽 0.4,取出了两条数据。
以后就是有类型转换_split_的内容。