Spark3学习【基于Java】2. Spark-Sql核心概念
SparkSession
从Spark2开始,Spark-SQL引入了SparkSession这个核心类,它是处理DataSet等结构数据的入口。在2.0之前,使用的是spark-core里的SparkContext。从前面的例子里也可以看到,程序一上来就要先创建SparkSession对象:
- SparkSession spark = SparkSession.builder().appName("Simple Application").master("local").getOrCreate();
如果是在Spark-shell中,默认提供了它的一个对象叫spark。
spark-shell是给scala环境使用的一个命令行调试工具
SparkSession组合了2.0之前的几种上下文类,比如SQLContext和HiveContext,所以使用这些的地方原则上可以都用SparkSes来代替了。不过其他上下文类依然存在,就像RDD对于DataSet一样,它们依然功能完整操作细腻,比不过是Spark提供了新的API来封装、简化操作。
我们来看一下上面那条创建语句:最后的方法含义清晰,有就返回,没有就创建。master方法用来指明在集群环境下的master是谁。在Standalone 模式下传local或local[n],n是spark执行任务时的期望分片数。
RDD/Dataset/DataFrame
Resilient Distributed Datasets (RDD) 译成弹性分布式数据集,是Spark中的核心概念。前面说过这个概念现在被Dataset和DataFrame代替了,但它依然存在。由于它的一些"缺点",导致Spark提供了更高级的API,但是在它之上构建的。
它是一组对象组成的不可变的分布式集合,里面的数据会被分成多个逻辑片在不同的节点上面计算。
在遇到RDD的时候,现在我们通常会将其转化为Dataset和DataFrame,因为DataFrame更好用,它提供了和关系表一样的具名列,更重要的是计算性能也更好。
转化的方法也很简单,之前我们用到了:toDF()。
dataset和dataFrame的区别是,dataset的泛型类型是明确的,所以是类型安全的,编译的时候就能检查问题,风格也更接近面向对象。而dataframe的泛型类型是Row,里面有哪些列要主动探知。
因为它们的数据结构是同一个,所以优化方式是一致的:能够利用Catalyst 查询引擎,堆外存储机制等。
Spark程序是运行了JVM上的,所以会有垃圾回收的过程。Spark为了不对计算数据进行GC扫描,通过Unsafe类使用了非堆内存
Encoder
编码器是用来将Java对象转化为Spark的二进制格式的,我们前面的例子里也用了一些内置的编码器,非常方便但是不好看。
上面说了spark使用了堆外内存,所以会涉及大量的数据序列化。Spark提供的编码器有一个强大的地方是,不用反序列化就能访问属性。
Spark3学习【基于Java】2. Spark-Sql核心概念的更多相关文章
- JAVA入门(1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则)
主要内容: 1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则 JAVA的平台应用 JAVA的平台应用分为3个部分: 一.JAVA SE,主要 ...
- Spark Streaming核心概念与编程
Spark Streaming核心概念与编程 1. 核心概念 StreamingContext Create StreamingContext import org.apache.spark._ im ...
- Spark系列-核心概念
Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...
- Spark SQL基本概念与基本用法
1. Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了两个编程抽象分别叫做DataFrame和DataSet,它们用于作为 ...
- Ext JS 6学习文档–第2章–核心概念
核心概念 在下一章我们会构建一个示例项目,而在这之前,你需要学习一些在 Ext JS 中的核心概念,这有助于你更容易理解示例项目.这一章我们将学习以下知识点: 类系统,创建和扩展类 事件 Ext JS ...
- Flink SQL 核心概念剖析与编程案例实战
本次,我们从 0 开始逐步剖析 Flink SQL 的来龙去脉以及核心概念,并附带完整的示例程序,希望对大家有帮助! 本文大纲 一.快速体验 Flink SQL 为了快速搭建环境体验 Flink SQ ...
- SpringInAction学习笔记(一):核心概念
Spring自带了多种应用上下文 AnnotationConfigApplicationContext:从一个或多个java配置类中加载应用上下文 AnnotationConfigWebApplica ...
- Maven学习总结(4)——Maven核心概念
Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识 ...
- Maven学习(四)-- Maven的核心概念
摘自:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1. ...
- 自适应查询执行:在运行时提升Spark SQL执行性能
前言 Catalyst是Spark SQL核心优化器,早期主要基于规则的优化器RBO,后期又引入基于代价进行优化的CBO.但是在这些版本中,Spark SQL执行计划一旦确定就不会改变.由于缺乏或者不 ...
随机推荐
- virtualbox Ubuntn配置多站点
1.编辑站点文件: nano /etc/nginx/sites-available/default cd /etc/nginx/sites-available/ ls2. 把default的设置文件 ...
- JS实现跟随鼠标移动的div,和一串跟随鼠标的div,鼠标移入移出实现图片的颜色淡入淡出
1.一直跟着鼠标移动的div:原理是div的left和top值有oEvent.clientX+scrollLeft鼠标指针向对于浏览器页面(或客户区)的水平坐标+元素中滚动条的水平偏移 <!DO ...
- 谈谈 JVM 垃圾回收机制
前言 垃圾回收需要思考三件事情,哪些内存需要回收?什么时候回收?如何回收? 一.哪些内存需要回收 JVM 的内存区域中,程序计数器.虚拟机栈和本地方法栈的生命周期是随线程而生,随线程而灭的.这几个区域 ...
- linux 下对zip,rar,tar,tar.gz,tar.bz2,tar.xz,gzip,bzip2,xz文件的归档,压缩和解压缩
目录 一.关于打包和压缩 二.linux对rar文件的压缩和解压缩 三.使用tar对文件进行归档,压缩,解压缩 3.1 tar对文件进行归档和解压 3.2 归档的添加和删除 3.3 tar对文件进行归 ...
- vue ali-oss 上传
vue项目使用阿里云oss上传图片或下载图片 https://www.cnblogs.com/zoo-x/articles/11778010.html#4565291Vue Element UI + ...
- vim快捷键之复制粘贴
yy: 复制光标所在行 p: 将复制的内容粘贴到光标所在行的下一行 P: 将复制的内容粘贴到光标所在行的上一行
- NOIP模拟68
T1 玩水 解题思路 我们称一个点合法当且仅当 \(s_{i-1,j}=s_{i,j-1}\) . 于是如果一个合法点在它的左上或者右下也可以相邻有一个合法点就是一个合法的图. 树状数组维护即可 co ...
- itest(爱测试) 4.5.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
本次发布一共6个更新(其中一个4.5.0的重大BUG,不得不先发布4.5.1).4.5.0中增加ldap 登录支持时,引入一个BUG,新增的itest本地用户不能登录,除非重启. V4.5.1详情如 ...
- grid 布局兼容性问题
低版本的安卓机上是不生效的 代码 .grid_4 { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: ...
- Github 如何查看自己的 star 和 fork
最近在 github 上看到偶尔有几个项目被 fork,心里也是挺开心的,但是查看项目的 fork 和 star,网上没有一个具体的教程,都是一个模板各种抄,本文就详细介绍如何查看. 查看 fork ...