SparkSQL和dataFrame简介和用法

SparkSQL

            1. Spark中原生的RDD是没有数据结构的

            2. 对RDD的变换和操作不能采用传统的SQL方法

            3. SparkSQL应运而生并并建立在shark上,伯克利实验室spark生态环境的组件之一

            4. SHARK最初很大程度上依赖性HIVE如语法解析器、查询优化器等

            5. 改进的SparkSQL框架摆脱了对Hive的依赖性,所以无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便

SparkSQL的优势

   数据兼容:数据结果集本身就是SPARKRDD,SparkSQL 可兼容Hive,JSON和parquet等文件,并可以获取RDBMS数据以及                    访问Cassandra等NOSQL数据文件

   性能优化:除了采取in-MemoryColumnar Storage、byte-code generation等优化技术外、将会引进cost model对查询进行                    动态评估、获取最佳物理计划等等

   组件扩展;SQL的语法解析器、分析器还是优化器都可以重新定义,进行扩展,如HIVE SQL

                                 

SparkSQL运行框架

     SparkSQL语句的顺序为:

            1. 对读入的SQL语句进行解析(Parse),分辨出SQL语句的关键词(如select 、from、where并判断SQL语句的合法                   性)

            2. 将SQL语句和数据库的数据字典进行绑定(Bind)如果相关的projection、data source等都是存在的话,就表示这个                  SQL语句是可以执行的

            3. 数据库会在这个计划中选择一个最优计划(optimize)

            4. 计划执行(Execute),按operation-》data source-》result的次序来进行的,在执行过程有时候不需要读取物理表                 就可以返回结果,如果查询运行过刚运行过的SQl语句,可能直接从数据库的缓冲池中获取返回结果。

实现SparkSQL

        1. 产生SchemaRDD—为了实现SPARKSQL必须将一般的RDD转换成带数据结构的数据集dataFrame

        2. SchemaRDD本身是一个RDD,但它本身包含是由行对象(row object)组成。每个行对象代表一条记录

        3. SchemaRDD提供了一些新的操作应用函数使得数据操作和分析更高效和简洁

        4. 可以将SchemaRDD注册成表,这样就可以用SQL访问RDD数据了,而结果集本身也可以是SchemaRDD即dataFrame

        5. 可以用各种方法生成SchemaRDD

产生DataFrame的方法

        1. 由已存在的RDD产生SchemaRDD。有以下两种方法:

                a)  从行对象推出数据结构并安插到原RDD上形成一SchemaRDD即DataFrame(语句较为简洁)

                b)  用编程的方法产生数据结构并用在DataFrame生成函数的参数中以形成一SchemaRDD

        2. 读入json,parquet,AVRO或CSV文件时读成SchemaRDD即dataFrame。这是因为这些文件本身就是带有结构的

        3. 将python或R中的dataFrame装换成spark中的SchemaRDD

注意:如果在DataFrame上使用SQL必须将它注册成表。当然SPARK DataFrame有自己的一套数据操作和分析APIs. 这些APIs 类似于PYTHON PANDAS中的DataFrame方法。

列:从行对象推出数据结构方法(用createDataFrame产生dataFrame)

                            

列:编程产生数据结构(用sc.parallelize产生dataFrame)

                            

                            

读入文件直接产生结构:如json

                            

读取其它文件和读取json文件差不多,转换的时候sqlContext.read.json这里把json改为其它类型即可,需要装换什么类型就写什么类型转换




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值