概述

  • 基于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

[DB] Spark SQL的更多相关文章

  1. Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主 ...

  2. Spark SQL概念学习系列之Spark SQL 架构分析(四)

    Spark SQL 与传统 DBMS 的查询优化器 + 执行器的架构较为类似,只不过其执行器是在分布式环境中实现,并采用的 Spark 作为执行引擎. Spark SQL 的查询优化是Catalyst ...

  3. Spark SQL 初步

    已经Spark Submit 2013哪里有介绍Spark SQL.就在很多人都介绍Catalyst查询优化框架.经过一年的发展后,.今年Spark Submit 2014在.Databricks放弃 ...

  4. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  5. spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案

    1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...

  6. 通过spark sql 将 hdfs上文件导入到mongodb

    功能:通过spark sql 将hdfs 中文件导入到mongdo 所需jar包有:mongo-spark-connector_2.11-2.1.2.jar.mongo-java-driver-3.8 ...

  7. Spark SQL笔记

    HDFS HDFS架构 1.Master(NameNode/NN) 对应 N个Slaves(DataNode/NN)2.一个文件会被拆分成多个块(Block)默认:128M例: 130M ==> ...

  8. Spark SQL快速离线数据分析

    拷贝hive-site.xml到spark的conf目录下面 打开spark的conf目录下的hive-site.xml文件 加上这段配置(我这里三个节点的spark都这样配置) 把hive中的mys ...

  9. Caused by: java.sql.SQLException: Failed to start database 'metastore_db' with class loader org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@d7c365, see the next exception for details.

    解决方法:https://stackoverflow.com/questions/37442910/spark-shell-startup-errors 异常: 18/01/29 19:04:27 W ...

随机推荐

  1. istio:在vs中实现ab测试和路径切割

    此篇内容 主要目的是总结vs中的match的有关规则和在istio中如何实现路径切割(当下版本1.8.2) 实验demo main.go package main import ( "git ...

  2. Jmeter(四十一) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 下篇(详解教程)

    1.简介 为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的.更有甚者觉得那是禁地神圣不可轻 ...

  3. Python的flask接收前台的ajax的post数据和get数据

    ajax向后台发送数据: ①post方式 ajax: @app.route("/find_worldByName",methods=['POST']) type:'post', d ...

  4. Dynamics CRM实体系列之窗体

    本节开始讲Dynamics CRM的窗体排版和设计,窗体也就是我们实际可以看到的表单界面.Dynamics CRM提供了一套独立的表单模板设计引擎,可以很方便的为开发者提供无代码开发,只需要简单的拖动 ...

  5. Github Pages(io) + 域名重定向 (手把手教你搭建个人网站)

    好歹也成为了在读phd的人,拥有个人网站是个有排面有很必要的事儿~ 在这里利用Github Pages + 域名重定向,实现个人网站的光速搭建~ 1.0 Github Repositories 首先你 ...

  6. ret2dl32

    ret2dl32 首先检查一下保护: IDA分析一下 程序很简单就是,往bss段上的buf读入0x400个数据,然后拷贝到栈上.read_got还被置为0,这一看就是要逼着你使用ret2dlresol ...

  7. 自动化kolla-ansible部署centos7.9+openstack-train-超融合高可用架构

    自动化kolla-ansible部署centos7.9+openstack-train-超融合高可用架构 欢迎加QQ群:1026880196 进行交流学习 环境说明: 1. 满足一台电脑一个网卡的环境 ...

  8. w1R3s靶机work_through

    前言 这靶机挺简单的.虽然网友们有分享oscp向的靶机集,但是没有一个难度梯度,做起来就怪怪的. 打点 nmap -sP 192.168.218.0/24 发现主机IP 192.168.218.134 ...

  9. EasyCode Entity 实体类模板 IDEA

    自己修改了一份EasyCode的实体类模板,防止日后找不到在这里存一下 修改了如下内容: 取消生成GetSet方法,改用Lombok 修改默认命名规则,改为[表名Entity.java] 取消了实现序 ...

  10. 在nginx配置将请求转发到某个真实后端服务ip

    一.打开nginx机器的nginx配置文件 命令: locate nginx.conf 会列出所有nginx.conf文件的地址, 一般咱们要用的nginx配置文件是/usr/local/nginx/ ...