赞
踩
撰写本文的目的:对于sparksql,网上有大量的详细文档,本人针对常用的操作进行一个整理,当然有大多数都是从其他地方搬过来的,包括官方文档以及其他网友的一些分享,一来是通过此次整理加强自己的记忆,二来如果有幸帮到某位网友,那是本人莫大的荣幸,先感谢您的阅读,废话不多说,进入正文:
下文所涉及到的相关软件版本分别为:
spark版本:v2.2.0
hive : v1.2.1
hadoop : v2.7.6
Spark sql是spark处理结构化数据的一个模块,它的前身是shark,与基础的spark rdd不同,spark sql提供了结构化数据及计算结果等信息的接口,在内部,spark sql使用这个额外的信息去执行额外的优化,有几种方式可以跟spark sql进行交互,包括sql和dataset api,使用相同的执行引擎进行计算的时候,无论是使用哪一种计算引擎都可以一快速的计算。
RDD:在spark刚开始的时候,引入RDD(弹性分布式数据集)
优点:
1)编译时类型安全,编译时就能检查出类型错误
2)面向对象的编程分格,直接通过类名点的方式来操作数据
例如:idAge.filter(_.age > "") //编译时直接报错
idAgeRDDPerson.filter(_.age > 25) //直接操作一个个的person对象
缺点:
1)序列化和反序列化的性能开销,无论是集群间的通信还是IO操作,都需要对对象的结果和数据进行序列化和反序列化
2)GC的性能开销,频繁的创建和销毁对象,势必会增加GC
DataFrame:spark1.3的时候引入了DataFrmae,是一个列方式组织的分布式数据集
优点:
1)引入了Schema,包含了一ROW位单位的每行数据的列信息,spark通过Schema就能够读懂数据,因此在通信和IO时就只需要序列化和反序列化数据,而结构的部分就可以省略了;
2)off-heap:spark能够以二进制的形式序列化数据(不包括结构)到off-heap(堆外内存),当要操作数据时,就直接操作off-heap内存,off-heap类似于地盘,schema类似于地图,Spark有了地图又有了自己地盘了,就可以自己说了算,不再受JVM的限制,也就不再受GC的困扰了,通过Schema和off-heap,DataFrame克服了RDD的缺点。对比RDD提升了计算效率,减少了数据的读取,底层计算优化
3)引入了新的引擎:Tungsten
4)引入了新的语法解析框架:Catalyst
缺点:
DataFrame客服了RDD 的缺点,但是丢失了RDD的优点,DataFrame不是类型安全的,API也不是面向对象分格的。
1)API不是面向对象的
idAgeDF.filter(idAgeDF.col("age") > 22)
2)DataFrame不是编译时类型安全的,下面这种情况下不会报错
idAgeDF.filter(idAgeDF.col("age") > "")
DataSet:到spark1.6的时候引入了DataSet,Encoder分布式数据集,是一个被添加的新接口,它提供了RDD 的优点(强类型化,能够使用强大的lambda函数)
DataSet是一个类,其中包含了三个参数:
1、集合转DataFrame
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。