最近工作用到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函数

参考:

Spark Python API Docs

Spark SQL Guide

How does createOrReplaceTempView work in Spark?

Mastering Apache Spark 2.3.2

Spark 编程指南

Spark: Why should we use SparkSession ?

Spark中的一些概念的更多相关文章

  1. Spark中的编程模型

    1. Spark中的基本概念 Application:基于Spark的用户程序,包含了一个driver program和集群中多个executor. Driver Program:运行Applicat ...

  2. 大数据学习day19-----spark02-------0 零碎知识点(分区,分区和分区器的区别) 1. RDD的使用(RDD的概念,特点,创建rdd的方式以及常见rdd的算子) 2.Spark中的一些重要概念

    0. 零碎概念 (1) 这个有点疑惑,有可能是错误的. (2) 此处就算地址写错了也不会报错,因为此操作只是读取数据的操作(元数据),表示从此地址读取数据但并没有进行读取数据的操作 (3)分区(有时间 ...

  3. 关于Spark中RDD的设计的一些分析

    RDD, Resilient Distributed Dataset,弹性分布式数据集, 是Spark的核心概念. 对于RDD的原理性的知识,可以参阅Resilient Distributed Dat ...

  4. 【Spark篇】---Spark中Shuffle文件的寻址

    一.前述 Spark中Shuffle文件的寻址是一个文件底层的管理机制,所以还是有必要了解一下的. 二.架构图 三.基本概念: 1) MapOutputTracker MapOutputTracker ...

  5. 【Spark篇】---Spark中Shuffle机制,SparkShuffle和SortShuffle

    一.前述 Spark中Shuffle的机制可以分为HashShuffle,SortShuffle. SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有val ...

  6. 【Spark篇】--Spark中的宽窄依赖和Stage的划分

    一.前述 RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖. Spark中的Stage其实就是一组并行的任务,任务是一个个的task . 二.具体细节 窄依赖 父RDD和子RDD parti ...

  7. 【Spark篇】---Spark中控制算子

    一.前述 Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存. 控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化 ...

  8. Spark集群基础概念 与 spark架构原理

    一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...

  9. 什么是spark(六)Spark中的对象

    Spark中的对象 Spark的Conf,极简化的场景,可以设置一个空conf给sparkContext,在执行spark-submit的时候,系统会默认给sparkContext赋一个SparkCo ...

随机推荐

  1. 用了 HTTPS 还不安全,问题就出在低版本 TLS 上

    HTTPS 加密时代已经来临,近两年,Google.Baidu.Facebook 等互联网巨头,不谋而合地开始大力推行 HTTPS, 2018 年 7 月 25 日,Chrome 68 上线,所有 H ...

  2. 网络协议 8 - TCP协议(上):性恶就要套路深

    系列文章: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网络协议 ...

  3. 【Docker】(2)---仓库、镜像、容器

    [Docker](2)---仓库.镜像.容器     学习Docker,我觉得首先要了解的是仓库.镜像.容器到底是什么,他们有什么区别. 一.通俗理解 1.Docker 镜像 (images) 容器运 ...

  4. 说一说MVC的Authentication过滤(四)

    前沿: 一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登 ...

  5. .NET Core 2.x中使用Named Options处理多个强类型配置实例

    来源: Using multiple instances of strongly-typed settings with named options in .NET Core 2.x 作者: Andr ...

  6. Android--SoundPool

    前言 在Android中播放音频文件经常会用到MediaPlayer,但是MediaPlayer存在一些不足的地方,如:资源占用量较高.加载延迟时间较长.不支持多个音频同时播放等.这些缺点决定了Med ...

  7. leetcode — validate-binary-search-tree

    import apple.laf.JRSUIUtils; /** * Source : https://oj.leetcode.com/problems/validate-binary-search- ...

  8. leetcode — reverse-linked-list-ii

    /** * Source : https://oj.leetcode.com/problems/reverse-linked-list-ii/ * * * Reverse a linked list ...

  9. PC逆向之代码还原技术,第四讲汇编中减法的代码还原

    目录 PC逆向之代码还原技术,第四讲汇编中减法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 三丶根据高级代码IDA反汇编的完整代码 四丶知识总结 PC逆向之代码还原技术,第 ...

  10. 杭电ACM2015--偶数求和

    偶数求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...