学习spark sql

一、spark sql概述:

1.了解官网相关内容

​ sql概述
​ sparksql编程数据结构(dataframe , dataset )
​ SparkSession
​ sparksql基本操作(api使用说明)
​ Global Temporary View
​ RDD如何转换(dataframe , dataset )
​ udf / udaf (Hive函数)
​ Data Sources sql数据源来自哪里,数据处理之后能够放到哪里
​ Parquet Files 数据存储格式
​ SparkSql如何来整合mysql | (sqoop)【spark—>sqoop退出舞台了】
​ 版本说明

2.sparksql是spark生态栈中的一个模块

(1)RDD取代MR(函数式编程、编码)

​ DataFrame/DataSet(sql的编程风格取代hive hql)【MR】

​ hive(计算、存储);spark on hive【hive制作存储不做计算】

​(2)spark sql底层是翻译成SparkRDD(尽量基于内存计算),只能处理结构化的数据

​ MR做数据清洗,为什么不用hive做数据清洗;RDD做数据清洗(数据分析:sparksql)

​ 说明:SparkCore(RDD)把日志非结构化格式数据处理成结构化。数据存储到hive之后使用sparksql对hive中存储的数据做各种数据分析

补充:外部常见的数据源有json、parquet(列式存储)、RDBMS(关系型数据库)、hive

3.为什么要学习sparksql

(1)sparksql易于整合

flume(数据采集------老版本源和目标要相同,新版和spark能解耦)

源 — 缓存 — 目标
源 — 目标

SparkSql [数据源可以来自任意的地方、目标也可以是任意的地方](解耦)

(2)统一的访问方式

spark.read(“json / .parquet”)

(3)兼容hive

(4)兼容mysql

4.sparksql的版本迭代

  • 1.SparkSql的前身Shark[2014停止维护了、Spark 2014-09]【1.x】

  • 2.spark1.3(dataframe)

  • 3.spark1.4(窗口函数)

  • 4.spark1.5对hive支持了(udf、udaf)

  • 5.spark1.6.3【注释 --】 | Spark2.2.0

  • 6.spark2.x系列

二、程序实现

sparksql的基本操作

补充说明: SparkSql —》 DataFrame不会做编译期间的检查(对Sql/字段)

配置文件相同;程序入口不同(sparkRDD:SparkContext)

案例一:老版本的写法

def main(args: Array[String]): Unit = {
   
  val conf: SparkConf = new SparkConf().setMaster("local[1]").setAppName("sparksql")
  val sc: SparkContext = new SparkContext(conf)//RDD程序入口
  //缺少sparksql程序的入口
  val sqlContext: SQLContext = new SQLContext(sc)
  val frame: DataFrame = sqlContext.read.json("C:\\Users\\Administrator\\Desktop\\javaclass\\spark\\09_07_sql\\people.json")

  frame.show()
  sc.stop()
}

SparkSql基本操作:
配置文件:一样
程序的入口:不一样
SparkRDD : SparkContext
SparkSql : SQLContext
: HiveContext
Spark2.x后面:SparkSession(统一了程序的访问入口)

案例二:新版本写法

 def main(args: Array[String]): Unit = {
   
    val spark = SparkSession.builder().appName("sparksql2")
      .master(master = "local[1]")
    //  .enableHiveSupport()
      .getOrCreate()
//    spark.sparkContext//RDD
//    spark.sqlContext//sparksql
    val frame: DataFrame = spark.read.json("C:\\Users\\Administrator\\Desktop\\javaclass\\spark\\09_07_sql\\people.json")
    frame.show()
    spark.stop()
  }

构建者设计模式和new的不同之处:

new构建对象()存在对象,给对象的属性进行赋值

构建者先把一个对象构建之后应该有的信息全部进行说明,最后构建对象

案例三:sparksql基本操作

SparkSql —》 DataFrame不会做编译期间的检查(对Sql/字段)

def main(args: Array[String]): Unit = {
   
    //1.控制日志打印级别
    Logger.getLogger("org.apache.hadoop").setLevel(Level.WARN)
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    Logger.getLogger("org.spark-project").setLevel(Level.WARN)
    //2.构建程序的入口
    val spark = SparkSession.builder().appName("sparksql2")
      .master(master = "local[1]")
      .getOrCreate()
    //3.获取数据
    val df: DataFrame = spark.read.json("C:\\Users\\Administrator\\Desktop\\javaclass\\spark\\09_07_sql\\people.json")
    /**打印Schema信息
     */
    //df.printSchema()
    //df.show() //默认20条
    /**简单的查询: select name,age from t_name
     * spark core:读取文本--》map(切分、返回二元组)
    */
    val df1: DataFrame = df.select(new Column("name"), new Column("age"))
    val df2: DataFrame = df.select("name","age")
    //df1.show()
    //df2.show()
    /**条件的查询: select * from t_name where age > 19
     * spark core:读取文本--》map((age,height,name))-->filter(age>19 false <19 true).foreach
     */
//    val df3: DataFrame = df.select(   //age只会输出true、false
//      new Column("name"), new Column("height")
//      , new Column("age").>(19).as("age19")
//    )
//    df3.show()

    val df4: DataFrame = df.select(   //可以实现
        new Column("name"), new 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值