spark.2 sql学习

本文详细介绍了Spark中的DataFrame和DataSet的概念及其由来,强调了它们与RDD的区别,特别是DataFrame在结构化数据处理和SQL查询上的优势。SparkSession作为2.0版本后的统一入口,简化了不同数据源的操作。此外,文章还概述了Spark SQL的基本使用和可操作的数据源,包括Hive、内置数据源和其他数据源,强调所有数据源必须具备结构化特性才能进行SQL查询。
摘要由CSDN通过智能技术生成

目录

摘要:真正理解DataFrame/DataSet  sparl sql

一:结构化数据和非结构化数据

二:DataFrame概念由来

三:DataSet的由来

四:SparkSession由来

五:Spark Sql简介 

六:Spark Sql可以操作的数据源有哪些 


摘要:真正理解DataFrame/DataSet  sparl sql

一:结构化数据和非结构化数据

结构化数据指的是二维表,意思是这张表有行列,每一行的元素的意义一样,每一列又都有列明,就是我们常见的数据库表。结构化数据分成两部分组成:

  1:真实的数据

  2:数据的描述信息schema又称元数据信息。

同时满足以上两个条件才可以满足sql查询,否则的话是无法用sql查询数据的,所以说核心思想是schema,只有通过元数据信息才可以获取到数据对应的行列,sql就是这么干的。sql 是structured  Query Language 意思是结构化查询语言。

二:DataFrame概念由来

在spark早期版本是没有dataframe的概念的,那个时候所有的数据都是通过RDD进行操作的,而RDD是数据的组合,没有Schema信息,因此也不能用sql查询,所以一切的数据查询写入各种处理操作只能通过RDD算子(https://pg-fly.blog.csdn.net/article/details/109162173)来操作,在有些时候比较复杂。  所以说后来spark增加了对sql的查询操作,让数据处理更加的方便,而这个增加的模块就是DataFrame。

1:DataFrame和RDD类似都是分布式存储的,不可更改的,可以并行处理的数据集合。

2:和RDD不同的是DataFrame增加了schema信息,schema可以描述列明和列数据类型,基于此可以让DtataFrame支持          sql。

3:DataFrame也有和Rdd类似的Transformation操作和Action操作。

4:spark  Sql可以将Seq  RDD  CSV  JSON ORC Avro JDBC连接的数据库 以及hive表中的数据用DataFrame操作

5:  DataFrame  和RDD可以互相转换

总结:DataFrame增加了spark对二维数据结构的处理,是的spark支持sql查询

三:DataSet的由来

 DataFrame  和dataFrame都支持sql操作,因为二者都有schema描述性息,可以通过sql查询指定字段,大体上没有本质的区别。

  非说区别的话就是二者内部对数据的封装不一样,DataFrame的每一条数据元素对应一行数据表的数据,而这行数据用Row这么一个类来封装的,row里面就是数据库的每一行数据。但是  不包含类型信息,只有数据。

DataSet 中每一行数据不是Row  而是用户可以自定义,这个自定义用的就是case  class(String: name,Int age.....),这样的话,DataSet的每一行数据都是我们自定义的类,而且类型信息都有,不需要强制转换哦。  基于以上有人说DataFrame是特殊的DataSet也没有什么问题,Row是系统给的,case  class是自定义的。谈谈RDD、DataFrame、Dataset的区别和各自的优势_weixin_30896511的博客-CSDN博客

四:SparkSession由来

 spark2.0版本之前创建RDD用的是SparkContext, 要操作hive表格用的是HiveContext ,要操作spark内置的结构化数据用的是SqlContext,要处理流数据用的是StreamingContext。  这些不同数据源对用不同的操作入口,对编程十分不友好。所以在spark2.0版本之后统一用SparkSeaaoin来处理数据,做到了归一化。

五:Spark Sql简介 

1:spark内置模块提供了一个spark-sql的客户端,可以直接在配置了spark运行环境的机器上执行spark-sql,如下我在                windows配置了spark之后,执行cmd    spark-sql之后出现下图:

 2:spark内置模块spark-shell以可以将结构化数据用sql查询,用法和上图大同小异

 3:自己编写spark  scala程序的时候涉及到结构化数据DataSet/DataFrame也可以用spark sql操作。

六:Spark Sql可以操作的数据源有哪些 

1:来自于hive的数据源,可以直接sal查询hive表,或者转成DataFrame/DataSet

2:spark内置的数据源 指的是spark本身支持数据源,比如Text  csv  json jdbc等,可以直接用sql,也可以先转成DataFrame/DataSet

3:其他数据源:Seq  RDD 内存里的数据,必须自己转成DataFrame/DataSet

注意:不管哪种数据源,一定都是有结构的数据,否则无法用sql插叙。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我先森

鼓励一个吧,哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值