[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
参考
官网
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的更多相关文章
- Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理
转载请注明出处:http://www.cnblogs.com/xiaodf/ 之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主 ...
- Spark SQL概念学习系列之Spark SQL 架构分析(四)
Spark SQL 与传统 DBMS 的查询优化器 + 执行器的架构较为类似,只不过其执行器是在分布式环境中实现,并采用的 Spark 作为执行引擎. Spark SQL 的查询优化是Catalyst ...
- Spark SQL 初步
已经Spark Submit 2013哪里有介绍Spark SQL.就在很多人都介绍Catalyst查询优化框架.经过一年的发展后,.今年Spark Submit 2014在.Databricks放弃 ...
- 大数据技术之_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 ...
- spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案
1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...
- 通过spark sql 将 hdfs上文件导入到mongodb
功能:通过spark sql 将hdfs 中文件导入到mongdo 所需jar包有:mongo-spark-connector_2.11-2.1.2.jar.mongo-java-driver-3.8 ...
- Spark SQL笔记
HDFS HDFS架构 1.Master(NameNode/NN) 对应 N个Slaves(DataNode/NN)2.一个文件会被拆分成多个块(Block)默认:128M例: 130M ==> ...
- Spark SQL快速离线数据分析
拷贝hive-site.xml到spark的conf目录下面 打开spark的conf目录下的hive-site.xml文件 加上这段配置(我这里三个节点的spark都这样配置) 把hive中的mys ...
- 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 ...
随机推荐
- Python:函数解释(面向过程)
1. 函数概述 在编程的语境下,函数 (function) 是指一个有命名的.执行某个计算的语句序列 (sequence of statements) .函数可以针对某类问题建立了通用解决步骤(算法) ...
- Day03_17_数组
数组 什么是数组? 数组是多个相同类型数据按照一定顺序排列的有序集合,并使用一个名字命名,通过编号的方式,对这些数据进行统一的管理. 数组也是对象,数组中的元素相当于数组对象的成员变量 数组的长度是固 ...
- FusionInsight MRS:你的大数据“管家”
摘要:4月24日-26日,HDC.Cloud2021在深圳大学城成功举办,华为云FusionInsight MRS云原生数据湖带来最懂行的大数据解决方案,为政企客户提供湖仓一体.云原生的大数据解决方案 ...
- SpringCloud(四)GateWay网关
GateWay网关 概述简介 Gateway是在 Spring生态系统之上构建的AP网关服务,基于 Spring5, Spring Boot2和 Project Reactor等技术. Gateway ...
- 【秒懂音视频开发】21_显示BMP图片
文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的<播放YUV>做准备. 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来会更 ...
- Python语言程序设计(笔记)
1.平方根的格式化 知识点:平方根计算 pow(a,0.5)[可以计算负数,结果为复数] a**b 例题: 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出. ...
- WordPress伪静态规则设置
伪静态:即网站本身是动态网页如.php..asp..aspx等格式,而这类网页还带"?"加参数来读取数据库.开启伪静态后,动态网页即被转换重写成静态网页类型页面. WordPres ...
- Laravel路由中不固定数量的参数如何实现?
前言 laravel是个好框架,我也在学习和使用,并且在公司里推广,最近在读 Laravel 源码的时候,发现了一个段特别有趣的代码,大家请看: ... 这三个点是做什么用的呢?我查了 PHP 的手册 ...
- 【SpringBoot】SpringBoot2.x整合Shiro(一)
一:什么是ACL和RBAC: ACL: Access Control List 访问控制列表 以前盛行的一种权限设计,它的核心在于用户直接和权限挂钩 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩 ...
- sqlserver2018 报错恢复
报错: Description: SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为: 0xb2b1af16,但实际为: 0xac9393a2).在文件 'C:\Progr ...