最近工作用到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. PHP-mysqli 出错回显

    面向对象风格 <?php $conn = new mysqli("localhost", "username", "password" ...

  2. ASP.NET 下载文件方式

    protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决使 ...

  3. qt之图像处理

    毕业2年了,一直使用的qt做桌面程序,很少接触图像算法类的东西,最近由于项目的原因,不得不了解下图像处理,不过也是一些简单的图像处理,仅此作为记录,并希望能帮助初学qt图像处理的朋友. 首先我推荐一篇 ...

  4. 从零开始学习PYTHON3讲义(四)让程序更友好

    <从零开始PYTHON3>第四讲 先看看上一讲的练习答案. 程序完成的是功能,功能来自于"程序需求"("需求"这个词忘记了什么意思的去复习一下第二讲 ...

  5. 带着萌新看springboot源码06

    这节来说个大家都比较熟悉的东西,就是servlet三大组件,servlet.filter.listener,再说说springboot的内置tomcat. 也许还会说一下tomcat的运行原理,还有, ...

  6. PyQt:个性化登录界面模仿QQ登录

    写在前面 写了一个登录界面的demo,类似QQ的,写的自己喜欢的样式,贴一下代码,先上效果,如下 陈述 PyQt5+Python3.5.2 login.py是里登录的主界面loginWnd类,Head ...

  7. 浅析Javascript单例模式

    定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点 .就想我们在开发中有些对象只需要一个,例如window对象. 1. 实现单例模式 var Singleton = function( nam ...

  8. 开源 serverless 产品原理剖析 - Kubeless

    背景 Serverless 架构的出现让开发者不用过多地考虑传统的服务器采购.硬件运维.网络拓扑.资源扩容等问题,可以将更多的精力放在业务的拓展和创新上. 随着 serverless 概念的深入人心, ...

  9. Tapestry3.0开发概论

    一.TAPESTRY技术的综述. tapestry是平行于struts/Spring MVC/webwork /jsf等开发工具的语言.tapestry是基于组件的开发工具.它具有组件的可重用性.因为 ...

  10. 程序员十大热门flag,有你的吗?

    2018的尾声,南方人期盼已久的下雪天终于到了,实在是太鸡冻了! 而赏雪的喜悦也伴随着寒冷的忧伤 早上起床越来越难,衣服怎么裹都还是冷 这时,穿搭届的神话般的人物——程序员们,可能又要引起轰动了吧! ...