41-天亮大数据系列教程之SparkSql介绍与应用开发

目录
1、SparkSql概述
2、SparkSql Shell操作SparkSql
3、DataFrames API操作SparkSql
4、DataSets API操作SparkSql
5、多数据集抽象类型对比分析
6、经典问题

详情
1、SparkSql概述

  • 1)混乱的前世今生

    • 先出现的MapReduce,后本着sql on mr的思路,产生了Hive。
    • MapReduce执行效率太慢,效率升级后产生了Tez,再效率升级后产生了Spark。
    • Spark为了方便操作,本着sql on spark的思路产生了Shark,但Shark太多的借鉴和依赖Hive,制约了Spark的One Stack Rule Them All的既定方针,制约了Spark各个组件的相互集成
    • 最后被Spark团队推翻和停更,推出了sql on spark新项目SparkSql,使sql on spark的发展方向上,得到质的提升。
  • 2) SparkSql简介

    • SparkSql是什么

      • Spark SQL是Spark处理数据的一个模块
      • 专门用来处理结构化数据的模块, 像json,parquet,avro,csv,普通表格数据等均可。
        • 与基础RDD的API不同,Spark SQL中提供的接口将提供给更多关于结构化数据和计算的信息,
          并针对这些信息,进行额外的处理优化。
    • SparkSql操作方式说明

      • SparkSql shell

      • 类似于hive shell

      • DataFrames API

      • 最早专为sql on spark设计的数据抽象,与RDD相似,增加了数据结构scheme描述信息部分。

      • 写spark代码,面向DF编程,可以与其它Spark应用代码无缝集成。

      • 比RDD更丰富的算子,更有利于提升执行效率、减少数据读取、执行计划优化。

      • DataSets API

        • 集成了RDD强类型和DataFrames结构化的优点,官方正强力打造的新数据抽象类型。

        • 写spark代码,面向DS编程,可以与其它Spark应用代码无缝集成。

        • 比RDD更丰富的算子,更有利于提升执行效率、减少数据读取、执行计划优化。

        • 面向程序接口对接的操作:通过JDBC、ODBC等方式操作SparkSql

        • 通过jdbc、odbc链接后,发送相关的sparksql请求,实现基于sparksql功能开发。

  • SparkSql的特点

    • 可以利用SQL、DataFrams API、DataSets API或其它语言调用的基于sparksql模块计算,均是sparkcore执行引擎,其对计算的表达是独立的,即开发人员可以轻松在不同API之间切换实现相同的功能。

      • 也可以通过命令行、JDBC、ODBC的方式来操作SparkSQL,方便其它数据平台、BI平台使用SparkSql模块。
      • 在spark应用程序开发中,可以无缝使用SparkSql操作数据。
      • 可以直接使用Hive表格数据。
      • 与Hive的兼容性极好:它复用了Hive的前端(去掉驱动mapreduce执行任务的部分)和元数据,因此可以拿过来hivesql的东西在sparksql上运行即可。
      • 并不是100%完全兼容,且绝大多数情况下,不需要改动,或只需要极小的改动!!!
        比如个别版本不支持直接insert into table xxx values(xxx…)的插入数据的方式
      • SparkSql的应用中,sql是一个重要方面,但不局限制sql。
    • SparkSql愿景

      • 写更少的代码
      • 读更少的数据
      • 把优化的工作交由底层的优化器运行
        • 把优化工作拿掉,我们并不需要做一些优化工作,也就是小白和高手写出来的应用程序最后的执行效率都是一样的。
  • 3) Hadoop生态圈SQL相关重要名词解释

    • SQL
      • 面向数据编程的最高级抽象
      • HQL=Hive Sql
      • sql on hadoop的落地
      • Hive on mr
      • sql on mapreduce引擎
      • Hive on tez
      • sql on tez引擎
      • Shark
      • 早期发展的sql on spark项目,已废弃
  • SparkSql

    • spark团队主推的sql on spark项目,目前已相对成熟
    • sql on spark商用的首选
    • Hive on spark
    • Hive团队的主推,但没有得到spark团队的强力支持。
      * 是sql on spark的第2选择,但相对bug和使用复杂度略高

2、SparkSql Shell操作SparkSql

  • 环境进入方式
    //直接输入spark-sql+自己想要添加的参数即可,与spark-shell相似
    spark-sql [options]
    //如指定运行模式
    spark-sql local[*]
    //如指定运行spark webui服务的端口,解决多人共用一个入口机时候的进入时候报port bind exception的问题
    spark-sql --conf spark.ui.port=4075
    //也可以用于似于hive -e的方式,直接直接一段sparksql代码

    • 成功进入后状态

    • 操作方式

      • 使用方式融合几乎全部hive操作:集成了hive前端使用+元数据信息
        • DDL、DML、DQL

          • 创建库
          • 创建表
          • 删除表
          • 数据装载(不支持直接insert into table … values(…)方式)
          • 更多的系统函数,包含全部的hive系统函数
          • 添加自定义udf/udaf/udtf等
          • 动态自定义分区
          • hive数据分析数
          • 及其它hive的各项功能

3、DataFrames API操作SparkSql

  • 1)开发环境搭建步骤

    • 与之Sbt构建SparkWordCount步骤完全一样。
      • 将Spark-Sql库依赖,加入build.sbt
      • sbt reload
      • sbt eclipse
      • eclipse项目中进行刷新操作
      • spark-sql依赖库

    “org.apache.spark” %% “spark-sql” % “1.6.2” % “provided”

  • 2 ) DataFrames相关操作

    • 创建DataFrames

    package com.tl.job003.sql
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    import org.apache.spark.sql.SQLContext
    object SparkSqlTest {
    def main(args: Array[String]) {
    val conf = new SparkConf()
    conf.setMaster(“local”);
    conf.setAppName(“TestSparkSql”);
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    // 添加将RDD转化为DataFrame的功能包引入
    import sqlContext.implicits._
    val df = sqlContext.read.json(“file:\E:\test\job003\sparksql\input_weibo.json”)
    df.show();
    sc.stop();
    }
    }

DataFrame常用操作

  • 常用命令

    • show
    • printSchema
    • select
    • filter
    • groupBy
    • count
    • orderBy
    • 其它操作类比于sql即可
  • 综合示例

    package com.tl.job003.sql
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    import org.apache.spark.sql.SQLContext
    object SparkSqlTest {
    def main(args: Array[String]) {
    val conf = new SparkConf()
    conf.setMaster(“local”);
    conf.setAppName(“TestSparkSql”);
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    // 添加将RDD转化为DataFrame的功能包引入
    import sqlContext.implicits._
    val df = sqlContext.read.json(“file:\E:\test\job003\sparksql\input_weibo.json”)
    //默认显示内容的top20
    df.show()
    // 打印内容对应的表结构
    df.printSchema()
    // 选择内容当中的某一个列对应的内容
    df.select(“content”).show()
    // 选择任意列并进行自定义操作
    df.select(df(“content”), df(“commentCount”), df(“commentCount”) + 10000).show()
    // 选择评论数大于100的数据显示出来
    df.filter(df(“commentCount”) > 100).show()

    // 按userId进行分组计数统计
    df.groupBy("userId").count().show()
    
    //分组统计结果按默认升序排列
    df.groupBy("userId").count().orderBy("count").show()
    
    //分组统计结果按降序排列
    import org.apache.spark.sql.functions._
    df.groupBy("userId").count().orderBy(desc("count")).show()
    sc.stop();
    

    }
    }

未完待续,csdn的编辑器太难用了。。。。。。



天亮教育是一家从事大数据云计算、人工智能、教育培训、产品开发、咨询服务、人才优选为一体的综合型互联网科技公司。
公司由一批BAT等一线互联网IT精英人士创建,
以"快乐工作,认真生活,打造高端职业技能教育的一面旗帜"为愿景,胸怀"让天下没有难找的工作"使命,
坚持"客户第一、诚信、激情、拥抱变化"的价值观,
全心全意为学员赋能提效,践行技术改变命运的初心。

更多学习讨论, 请加入
官方-天亮大数据交流-366784928
群二维码:
这里写图片描述
天亮教育公开课-从小白到大佬修成记-全系列视频地址:http://bbs.myhope365.com/forum.php?mod=viewthread&tid=1422&extra=page%3D1

欢迎关注天亮教育公众号,大数据技术资料与课程、招生就业动态、教育资讯动态、创业历程分享一站式分享,官方微信公众号二维码:
这里写图片描述

天亮教育官方群318971238,
爬虫、nlp技术qq群320349384
hadoop & spark & hive技术群297585251
教育培训官网:http://myhope365.com
项目研发官网:http://shangyuninfo.com/
官方天亮论坛:http://bbs.myhope365.com/

猜你喜欢

转载自blog.csdn.net/erliang20088/article/details/84239774