[DB] Spark SQL

概述

  • 基于Spark,兼容Hive
  • 集成在Spark中,不需单独安装
  • 提供统一的数据访问方式
  • 结构化的数据类型:JDBC、JSON、Hive、Parquet(Saprk SQL 默认数据源)
  • 支持标准的数据连接:JDBC、ODBC
  • Hive把sql解析成了mapreduce程序,sparksql把sql语句解析成了Spark任务
  • spark core 操作RDD,spark sql 操作DataFrame
  • RDD内部元素是java对象,DataFrame内部是Row对象,相比于RDD多了元信息
  • DataFrame是一种以RDD为基础的分布式数据集,类似MySQL的表
  • DataSet是分布式的数据集合,提供了强类型支持,在RDD每行增加类型约束,解决了DataFrame缺乏编译时类型安全
  • DataSet包含了DataFrame功能,Spark2.0中两者统一,DataFrame表示为DataSet[Row]
  • 表(DataFrame)= 结构(Schema) + 数据(RDD)
  • Spark on Hive:通过Sparksql加载Hive配置文件,获取元信息,底层运行Spark RDD(Spark主导,拿到Hive元信息),例如通过Spark程序将Hive数据写入ES
  • Hive on Spark:把Hive查询从mr操作替换为Spark RDD操作,需重新编译Spark,操作较复杂(Hive主导,替换计算引擎)

 RDD

 DataFrame

 DataSet

优缺点

RDD

  • 优点
    • 编译时类型安全
    • 面向对象开发风格
  • 缺点
    • 构建java对象会占用heap堆空间,导致频繁GC
    • 数据序列化,反序列化开销大

DataFrame

  • 优点
    • 引入off-heap,对象构建不占用堆内存,避免频繁GC,运行效率高
    • 引入schema,传输数据量减小,序列化反序列化开销减小
  • 缺点
    • 编译时不安全
    • 不具有面向对象开发风格

DataSet

  • 优点
    • 结合RDD和DataFrame
    • 支持自定义对象存储
    • 支持结构化数据sql查询
    • 采用堆外存储,gc友好
    • 类型转换安全,代码友好

创建DataFrame

  • 使用 case class 样本类
    • 定义表的 schema
    • 导入HDFS的dept.csv作为数据
  • 使用 Spark Session
    • 包括 Spark Context、SQL Context、Streaming Context
    • 2.0后引入的统一访问接口,可访问所有spark组件
    • 使用StructType创建schema
  • 读取带格式文件
    • Json

 

操作DataFrame

  • DSL语句
  • SQL语句

DataSet

视图

  • 虚表,不存储数据
  • 普通视图:本地视图,只在当前session中有效
  • 全局视图:在不同session中都有效,把全局视图创建命名空间,global_temp

数据源

  • load() 和 save()
  • Parquet文件
    • 列式存储文件,Spark SQL默认数据源
    • 把其它文件转为Parquet文件
    • 支持Schema的合并:项目开始的时候,表(schema)很简单,逐步向表中增加新的列
  • Json文件
    • val testResult = spark.read.json("/usr/local/tmp_files/emp.json")
  • JDBC
  • Hive

自定义函数

  • UDF
  • UDAF

性能优化

  • 缓存方式:在内存中缓存数据
  • 性能优化参数

IDE中开发

  • 关闭log4j

参考

官网

http://spark.apache.org/sql/

Spark 集成 Hive

https://www.cnblogs.com/juncaoit/p/6545092.html

https://blog.csdn.net/qq_16633405/article/details/78278786

https://blog.csdn.net/weixin_37677769/article/details/83580893

http://bcxw.net/article/550.html

https://blog.csdn.net/qq_38704184/article/details/86482948

https://blog.csdn.net/xiaohu21/article/details/108960672

posted @ 2020-06-13 17:24  cxc1357  阅读(143)  评论(0编辑  收藏  举报