开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段: Dataset介绍_将 Dataset 转为同泛型的 RDD】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12044
Dataset介绍_将 Dataset 转为同泛型的 RDD
Dataset转为同泛型的RDD
当说 dataset 的底层是 RDD,dataset 底层的 RDD 的其中的泛型,是 internalrow,真正运行在集群里的 dataset,其实就是一个 RDD。在工作中会碰到一个 API,这个 API 叫做 data thank 加 RDD,通过 dataset,可以直接把 dataset转为一个 RDD。
这个操作,有内部的一些逻辑,前面说,Spark spark,是一个非常弹性的工具。也就是说这个 spark 其中,你可以在一个程序里面即使用 RDD 的又使用 Data set 又使用 SQL 。
你可以使用很多种工具,在这个 spark 程序当中去进行代码的编写,有一些操作用 dataset 不方便,所以直接转成了一个 RDD 的类型,通过这个 RDD 来进行操作。大家不知道这个 RDD 的这个属性的本质,就可能会过多的去使用这个属性,导致你的代码写出来的效率比较低。
进入到笔记当中,已经有非常多的这方面的说明,直接就进入到的 idea 当中,要去改造一下刚才的这个案例。
所以,直接复制出来一个新的案例以后,要把第一个部分给改造了,现在的这个创建的方式,还是比较原始和古老的,就可以对这种方式来进行一个改变,比如,直接创建出来一个 data set,可以直接使用 spark.create data sight 来去创建。 create 的毫无疑问,直接就把这个 dataset 创建出来,会比你先搞一个 rdd,再通过 DS 去转更好了
把前面的数组拷过来,这个 dataset 算是创建完成了。刚说了 query execution to rdd 的返回的一个类型是 rdd 的,其中是 Interalrow,这个 RDD 的作用就是 dataset 底层在集群当中去运行的那个物理计划的 rdd 。
如果是这样的话,还有一个 API,叫做 dataset,to.rdd 通过这个 API,他返回的这个数据类型,就叫做 typedrdd。这个 RDD 它是一个什么类型呢?
把他加上发现这个 rdd 的类型还是 person er,这个 data set 的类型也是 person,所以这个 RDD 和这个的 sight 的泛型是一样的。这个 rdd 和 to rdd 的之间有什么区别。
可以先去运行一下,Print ln,然后去打印 executionrdd.to debug string to debug string 这样一个 API,查看这个 RDD 的执行步骤。如果是这样的话,也可以去查看一下 tapped rdd,它的这个 to debug string 是什么样子的。
再多打印两个 print ln,然后,让它俩之间的打印分隔。然后运行代码,当的代码已经运行完成了,注意到这一段日志,是前面这个 two deduction,也就是execution,通过 query execution.toRDD 得到了。
TORDD 是通过 RDD 直接转换得来的,这个 RDD 有很多个这个职称的步骤,起码比上面多了两个。
就直接为的这两个 API 下一个结论,前面这个 query execution rdd 是直接获取到已经分析和解析过的 data set 的执行计划,从中拿到 RDD。下面的这一个API是通过将的这个 data set 底层的 rdd[Internalrow]通过 decocer 转成和 datadest 一样的 rdd.
两个方法明显是有很大区别的,一个是直接从底层的执行计划当中,拿它底层的那个 rdd,而另外一个通过 execution rdd,再将它其中的转成 rdd。
保持和 dataset 的类型一致,这两个API明显是不同的.但是这个 rdd 经常会使用,假如说这个 dataset 有一些 API 使用起来并 rdd,直接通过它来进行相应的操作。但是,你再通过这个 rdd 来转成 rdd 的时候,一定要小心操作,他会对其进行一个隐藏。