Spark SQL是Spark用于结构化数据处理的Spark模块
作用:
SparkSQL是Spark用来处理结构化数据 [json,csv,Excel, MySQL] 的一个模块,它提供了一个编程抽象叫做DataFrame / DataSet。
如果想使用SparkSQL处理文本数据或者非结构化数据怎么办? 需要将文本数据转换成结构化数据。 RDD----->DataFrame
特点:
1-容易整合:
可以使用java、scala、python、R等语言的API操作。
2-统一的数据访问方式:
连接到任何数据源的方式相同。
3-兼容hive
支持hiveSQL的语法。兼容hive(元数据库、SQL语法、UDF、序列化、反序列化机制)
4-标准的数据连接:
可以使用行业标准的JDBC或ODBC连接。
RDD与DataFrame区别:
Dataframe就是带有schema的RDD.
1-数据结构:
2-编程API:
RDD的操作基于spark中的算子,而Dataframe中提供了专门操作表的API:例如:select from where.... 这样的好处是处理数据的逻辑更简单,不需要向操作RDD的时候考虑需要什么样的算子,只要写出sqL语句,那么 Spark-SQL底层会根据我们的业务使用性能最优的算子。
Dataframe和DataSet的区别:
与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,Spark DataFrame很好地继承了传统单机数据分析的开发体验。
1.是Dataframe API的一个扩展,是Spark最新的数据抽象。
2.用户友好的API风格,既具有类型安全检查也具有Dataframe的查询优化特性。
3.Dataset支持编解码器,当需要访问非堆上的数据时可以避免反序列化整个对象,提高了效率。
4.样例类被用来在Dataset中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中的字段名称。
5.Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,所以可以通过as方法将Dataframe转换为Dataset。Row是一个类型,跟Car、Person这些的类型一样,所有的表结构信息都用Row来表示。
6.DataSet是强类型的。比如可以有Dataset[Car],Dataset[Person].