Spark中的一些概念
最近工作用到Spark,这里记一些自己接触到的Spark基本概念和知识。
本文链接:https://www.cnblogs.com/hhelibeb/p/10288915.html
名词
RDD:在高层,每个Spark应用包含一个driver程序,它运行用户的主函数,在集群上执行不同的并行作业。Spark中提供的主要抽象是弹性分布式数据集(resilient distributed dataset, RDD),它是分布在集群节点中的已分区的元素集合,可以被并行处理。RDD从Hadoop文件系统中的文件创建,或者从驱动程序中已有的Scala集创建。用户也可以要求Spark将RDD持久化在内存中,允许它在并行操作中被高效地复用。最后,RDD可以从节点故障中自动恢复。
Spark SQL:一个用于处理结构化数据的Spark模块。和RDD API不同,Spark SQL提供的接口会提供给Spark关于数据的结构和计算的更多信息。在内部,Spark SQL使用额外的信息来执行额外优化。有许多方式可以与Spark SQL交互,包含SQL和Dataset API。在进行计算时,无论使用哪种API/编程语言,都会使用相同的执行引擎。这意味着开发者可以基于数据变换的需要来自由切换不同的API。
Dataset:Dataset是分布式的数据集合。Dataset是Spark 1.6中新加入的接口,提供了RDD的优势(强类型化,应用lambda函数的能力),也提供了Spark SQL的优化执行引擎的优势。Dataset可以由JVM对象构造,然后通过函数变换(map, flatMap, filter等)来操纵。Dataset API在Scala和Java中可用。Python不支持Dataset API,但是由于Python的动态性,已经可以享受许多Dataset API的好处。(例如你可以通过row.columnName的方式自然地访问行中的字段)。R语言的情形与之类似。
DataFrame:DataFrame是一种有列名的Dataset。它在概念上等于关系数据库中的表或者R/Python中的数据帧,但是在底层有更多的优化。DataFrame可以从一个多重源构造,比如:结构化数据文件、Hive中的表、外部数据库或者既有的RDD。DataFrame API在Scala、Java、Python和R中可用。在Scala和Java,DataFrame被表示为多行Dataset。在Scala API中,Dataframe可以简单地表示为Dataset[Row]。而在Java API中,用户需要使用Dataset<Row>来表示Dataframe。

TempView:createOrReplaceTempView方法会创建(如果已存在同名视图的话,则替换)一个惰性计算视图,你可以将这个视图视作hive表来使用。除非你将Dataset缓存,否则它不会持久化到内存中。可以使用spark.catalog.dropTempView("tempViewName")来删除视图。
Caching and Persistence:缓存或持久化是Spark计算的优化技术。 它们有助于保存临时部分结果,以便可以在后续阶段重复使用。 因此,RDD的这些中间结果保存在内存(默认)或固态存储(如磁盘和/或复制)中。
SparkSession:Spark SQL的入口点。在开发Spark SQL应用时,这是首先要创建的对象之一。
你可以使用SparkSession.builder方法来创建SparkSession。
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder
.appName("My Spark Application") // optional and will be autogenerated if not specified
.master("local[*]") // only for demo and testing purposes, use spark-submit instead
.enableHiveSupport() // self-explanatory, isn't it?
.config("spark.sql.warehouse.dir", "target/spark-warehouse")
.withExtensions { extensions =>
extensions.injectResolutionRule { session =>
...
}
extensions.injectOptimizerRule { session =>
...
}
}
.getOrCreate
一旦被创建,SparkSession会允许你创建Dataframe(基于RDD或一个Scala Seq等),创建Dataset,方为Saprk SQL服务(例如ExperimentalMethods, ExecutionListenerManager, UDFRegistration),运行SQL查询,载入表以及访问DataFrameReader接口以载入选定格式的Dataset。
你的单个应用中可以有多个SparkSession。常见的用例是让每个SparkSession保持关系实体在逻辑上分离。

模块
SparkContext: Spark功能的主入口。
RDD: 弹性分布式数据集,见上文。
Broadcast: 可以在task间复用的广播变量。
Accumulator: 只允许增加值的共享变量。
SparkConf: 配置Spark用。
SparkFiles: 访问由作业载入的文件。
StorageLevel: 缓存持久化的级别。
TaskContext: 当前运行的作业的信息(实验性)。
RDDBarrier: 用屏障包装RDD以实现屏障执行。
BarrierTaskContext: 为屏障执行提供额外信息和工具的TaskContext.
BarrierTaskInfo: 与屏障作业有关的信息。
类
pyspark.sql.SparkSession: Dataframe和Spark SQL功能的主入口点。
pyspark.sql.DataFrame: 按列名分组的分布式数据集合,见上文。
pyspark.sql.Column: Dataframe中的列表达式。
pyspark.sql.Row: Dataframe中的行。
pyspark.sql.GroupedData: 聚合方法, 由 DataFrame.groupBy()返回.
pyspark.sql.DataFrameNaFunctions: 处理丢失数据(null值)的方法。
pyspark.sql.DataFrameStatFunctions: 静态功能方法。
pyspark.sql.functions: 对Dataframe可用的内建函数。
pyspark.sql.types: 可用的数据类型列表、
pyspark.sql.Window: 用于使用Window函数
参考:
How does createOrReplaceTempView work in Spark?
Spark: Why should we use SparkSession ?
Spark中的一些概念的更多相关文章
- Spark中的编程模型
1. Spark中的基本概念 Application:基于Spark的用户程序,包含了一个driver program和集群中多个executor. Driver Program:运行Applicat ...
- 大数据学习day19-----spark02-------0 零碎知识点(分区,分区和分区器的区别) 1. RDD的使用(RDD的概念,特点,创建rdd的方式以及常见rdd的算子) 2.Spark中的一些重要概念
0. 零碎概念 (1) 这个有点疑惑,有可能是错误的. (2) 此处就算地址写错了也不会报错,因为此操作只是读取数据的操作(元数据),表示从此地址读取数据但并没有进行读取数据的操作 (3)分区(有时间 ...
- 关于Spark中RDD的设计的一些分析
RDD, Resilient Distributed Dataset,弹性分布式数据集, 是Spark的核心概念. 对于RDD的原理性的知识,可以参阅Resilient Distributed Dat ...
- 【Spark篇】---Spark中Shuffle文件的寻址
一.前述 Spark中Shuffle文件的寻址是一个文件底层的管理机制,所以还是有必要了解一下的. 二.架构图 三.基本概念: 1) MapOutputTracker MapOutputTracker ...
- 【Spark篇】---Spark中Shuffle机制,SparkShuffle和SortShuffle
一.前述 Spark中Shuffle的机制可以分为HashShuffle,SortShuffle. SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有val ...
- 【Spark篇】--Spark中的宽窄依赖和Stage的划分
一.前述 RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖. Spark中的Stage其实就是一组并行的任务,任务是一个个的task . 二.具体细节 窄依赖 父RDD和子RDD parti ...
- 【Spark篇】---Spark中控制算子
一.前述 Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存. 控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化 ...
- Spark集群基础概念 与 spark架构原理
一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...
- 什么是spark(六)Spark中的对象
Spark中的对象 Spark的Conf,极简化的场景,可以设置一个空conf给sparkContext,在执行spark-submit的时候,系统会默认给sparkContext赋一个SparkCo ...
随机推荐
- 智能压缩,摆脱用 Gzip 还是 Brotli 的纠结
近日,又拍云上线了“智能压缩”功能,同时支持 Gzip 和 Brotli 压缩算法,在节约流量的同时,进一步减少用户的等待时间. CDN 流量问题一直以来是大家关注的重点,又拍云针对流量节约上线了一系 ...
- redis 系列8 数据结构之整数集合
一.概述 整数集合(intset)是集合键的底层实现之一, 当一个集合只包含整数值元素,并且这个集合元素数量不多时, Redis就会使用整数集合作为集合键的底层实现.下面创建一个只包含5个元素的集合键 ...
- 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
前言 古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...
- .net core下使用FastHttpApi构建web聊天室
一般在dotnet core下构建使用web服务应用都使用asp.net core,但通过FastHttpApi组建也可以方便地构建web服务应用,在FastHttpApi功能的支持下构建多人聊天室是 ...
- 不在models.py中的models
概述 如何让你定义的model不在models.py中 在app的models目录中的models 你新建一个app后这个models.py就会自动建立,里面只有几行代码.那么如果是一个中大型项目,每 ...
- 基于open62541的opc ua 服务器开发实现(1)
关于opcua的介绍这里就不多说了,相信大家大都有了一些了解,open62541是一个开源C(C99)的opc-ua实现,开源代码可在官网或github上下载. 话不多说,首先搭建一个opcua服务器 ...
- Docker最全教程——从理论到实战(二)
上篇内容链接: https://www.cnblogs.com/codelove/p/10030439.html Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准, ...
- Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API,Redis也是技术领域使用最为广泛的存储中间件,它是 ...
- 关于跨DB增量(增、改)同步两张表的数据小技巧
有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...
- 找到bug的根源,问五次为什么
在学习<问题分析与解决>时学到了一种找到问题根源的方法——问五次为什么.具体内容是:当遇到一个问题,不要只看当前答案,要继续往下问,为什么,连问五次,就能够找到更深层次的问题.最近在复盘b ...