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执行计划一旦确定就不会改变.由于缺乏或者不 ...
随机推荐
- 零知识证明: Tornado Cash 项目学习
前言 最近在了解零知识证明方面的内容,这方面的内容确实不好入门也不好掌握,在了解了一些基础的概念以后,决定选择一个应用了零知识证明的项目来进行进一步的学习.最终选择了 Tornado Cash 这个项 ...
- 在tomcat上安装PFX格式证书部署https
您可以在Tomcat服务器安装已签发的SSL证书,实现通过HTTPS安全访问Web服务.本文介绍如何在Tomcat服务器安装PFX格式的SSL证书. 步骤一:在阿里云的域名管理后台,下载SSL证书 登 ...
- 4G EPS 中的 PDN Connection
目录 文章目录 目录 前文列表 PDN PDN Connection APN APN 与 PGW POOL APN 与 vPGW APN 与漫游 PDN Type IP 类型 Non-IP 类型 MM ...
- mybatis-plus id在高并发下出现重复
mybaits-plus ASSIGN_ID生成 id生成策略 在分布式高并发环境下出现重复id https://github.com/baomidou/mybatis-plus/issues/307 ...
- 新手【BUUCTF】逆向writeup()
0x00前言 在大三开始入门逆向,已学完小甲鱼解密篇,刚开始看<加密与解密>,现在沉浸在快 乐的刷题学习中..... buuctf_reverse地址 0x01刚接触的逆向题 revers ...
- uniapp android端和ios端铃声静音,但是还是会震动
uniapp 使用了html5plus的api,可以实现调用原生的api功能,htm5plus官方api文档: https://www.html5plus.org/doc/zh_cn/ios.html ...
- 鸿蒙极速入门(三)-TypeScript语言简介
ArkTS是HarmonyOS优选的主力应用开发语言.ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集.因此,在学习ArkTS语言之 ...
- 在Rainbond中一键部署高可用 EMQX 集群
本文描述如何通过云原生应用管理平台 Rainbond 一键安装高可用 EMQX 集群.这种方式适合不太了解 Kubernetes.容器化等复杂技术的用户使用,降低了在 Kubernetes 中部署 E ...
- Linux设备驱动--异步通知
注:本文是<Linux设备驱动开发详解:基于最新的Linux 4.0内核 by 宋宝华 >一书学习的笔记,大部分内容为书籍中的内容. 书籍可直接在微信读书中查看:Linux设备驱动开发详解 ...
- Java中对的创建与引用
对象与引用 Java语言中除了基本数据类型以外都属于引用类型 Java中的对象是通过引用对其操作的 class Car{ String name; String color; int price; } ...