Spark调研笔记第5篇 - Spark API简单介绍

因为Spark是用Scala实现的,所以Spark天生支持Scala API。此外,还支持Java和Python API。

以Spark 1.3版本号的Python API为例。其模块层级关系例如以下图所看到的:

从上图可知,pyspark是Python API的顶层package,它包括了几个重要的subpackages。当中:

1) pyspark.SparkContext

它抽象了指向spark集群的一条连接,可用来创建RDD对象,它是API的主入口。

2) pyspark.SparkConf

通过它可在提交的应用代码中动态创建spark app的配置并作为conf參数传给pyspark.SparkContext实例的构造函数。

若未动态创建conf。则pyspark.SparkContext实例从conf/spark-defaults.conf读取默认的全局配置。

3) pyspark.RDD

RDDs can be stored in memory between queries without requiring replication. Instead, they rebuild lost data on failure using lineage: each RDD remembers how it was built from other datasets (by transformations like
map, join or groupBy) to rebuild itself.

RDD是Spark编程的核心抽象概念,它代表了一个抽象的弹性分布式数据集。Spark支持对RDD进行两类操作:transformations和actions,它们所包括的函数列表能够參考官方文档的"Transformations"和"Actions"部分。

依据Spark Programming Guide文档"RDD Operations"部分的说明。依据已经存在的数据集创建新数据集的操作被称作transformation。对数据集做计算并将结果返回driver
program的操作被称作action

比如,map是依据传入的函数參数对已有RDD做处理。其执行结果得到一个新的RDD,所以它是一个transformation操作;而reduce则是依据传入的函数參数对已有RDD做计算,计算结果不再是个RDD。而是个详细的值(对reduce来说,计算结果是个详细的数字,而其他action(s)得到的可能是个list或其他数据结构),所以reduce是个action操作。

须要特别强调的是,Spark对全部的transformations操作都採用lazy evaluation的策略,也即spark在调度时并非对遇到的每一个transformation都马上求值以得到新的RDD,而是将针对某个RDD的一系列transformations操作记录下来,仅仅有终于遇到action操作时,Spark才会计算先前记录的每一个transformations。

这样的lazy evaluation的设计思路使得Spark得以更高效执行,由于调度器能够对从初始RDD到终于action操作路径上的transformations做合并或其他变换。且仅仅有终于的action操作结果才会返回给driver program,节省了transformations操作的中间结果在集群worker node和driver program间的传输开销。

默认情况下。调用action操作时,初始RDD经过的每一个transformation操作均会被运行一次,在多个actions会经过一系列同样的transformations操作时。这样的recompute显得并不高效。因此。在实际开发Spark计算任务脚本时。会被多个actions共用的transformations结果最好调用persist或cache缓存起来。这样会节省不少计算时间。

4) pyspark.Broadcast

通过Broadcast广播的变量的作用域相应用所申请的每一个节点上的executor进程都是可见的,并且广播后。变量会一直存在于每一个worker节点的executor进程中。直到任务结束。这样能够避免RDD数据集在driver和worker节点的executor进程间频繁传输带来的开销。

尤其是对于某些用到仅仅读共享变量的应用(如须要载入字典且全部计算节点均需訪问该字典),广播能够高效地实现变量共享的目的。

5) pyspark.Accumulator

它是Spark支持的还有一种变量共享的方式(第1种方式是上面介绍的Broadcast),worker节点上的进程能够通过add()操作更新变量,更新后的变量会自己主动传播回driver program。

6) pyspark.SparkFiles

当应用通过SparkContext.addFile()向集群提交任务用到的文件时,调用SparkFiles类的相关方法能够解析这些文件路径并訪问文件。

7) pyspark.StorageLevel

它能够指定RDD的存储级别,如仅仅使用内存、仅仅使用磁盘、内存为主磁盘为辅,等等。具体的控制标识能够參考这里的文档。

【參考资料】

1. Spark Programming Guide - RDD Operations

2. pyspark package

3. Spark Programming Guide: RDD Transformations

4. Spark Programming Guide: RDD Actions

5. pyspark package: pyspark.StorageLevel

======================= EOF ====================

时间: 2024-10-14 00:17:01

Spark调研笔记第5篇 - Spark API简单介绍的相关文章

Spark调研笔记第5篇 - Spark API简介

由于Spark是用Scala实现的,所以Spark天生支持Scala API,此外,还支持Java和Python API.以Spark 1.3版本的Python API为例,其模块层级关系如下图所示: 从上图可知,pyspark是Python API的顶层package,它包含了几个重要的subpackages,其中: 1) pyspark.SparkContext 它抽象了指向spark集群的一条连接,可用来创建RDD对象,它是API的主入口. 2) pyspark.SparkConf 通过它

Spark调研笔记第1篇 - Spark简介

在公司线上项目中引入Spark已经将近1年时间了,从效果来看,Spark确实是能提高生产力的优秀分布式计算平台. 从本篇笔记开始,会把之前调研Spark时的调研报告分享出来(限于篇幅,会分成几篇文章),以便帮助刚接触Spark的朋友们尽快入门. 下面开始正文. 1. 项目背景 Spark项目于2009年诞生于UC Berkeley AMP Lab并于2010年正式提交Apache Software Foundation成为开源项目.目前已经成为Apache下的明星项目,其代码提交活跃度在整个社区

Spark调研笔记第6篇 - Spark编程实战FAQ

本文主要记录我使用Spark以来遇到的一些典型问题及其解决办法,希望对遇到同样问题的同学们有所帮助. 1. Spark环境或配置相关 Q: Spark客户端配置文件spark-defaults.conf中,spark.executor.memory和spark.cores.max应该如何合理配置? A: 配置前,需要对spark集群中每个节点机器的core和memory的配置有基本了解.比如由100台机器搭建的spark集群中,每个节点的配置是core=32且memory=128GB,那么,向该

Spark调研笔记第3篇 - Spark集群相应用的调度策略简单介绍

Spark集群的调度分应用间调度和应用内调度两种情况,下文分别进行说明. 1. 应用间调度 1) 调度策略1: 资源静态分区 资源静态分区是指整个集群的资源被预先划分为多个partitions,资源分配时的最小粒度是一个静态的partition. 依据应用对资源的申请需求为其分配静态的partition(s)是Spark支持的最简单的调度策略. 我们已经知道,不同的应用有各自的Spark Context且占用各自的JVM和executor(s).依据Spark Job Scheduling文档的

Spark调研笔记第3篇 - Spark集群对应用的调度策略简介

Spark集群的调度分应用间调度和应用内调度两种情况,下文分别进行说明. 1. 应用间调度 1) 调度策略1: 资源静态分区 资源静态分区是指整个集群的资源被预先划分为多个partitions,资源分配时的最小粒度是一个静态的partition.根据应用对资源的申请需求为其分配静态的partition(s)是Spark支持的最简单的调度策略. 我们已经知道,不同的应用有各自的Spark Context且占用各自的JVM和executor(s).根据Spark Job Scheduling文档的说

Spark调研笔记第7篇 - 应用实战: 如何利用Spark集群计算物品相似度

本文是Spark调研笔记的最后一篇,以代码实例说明如何借助Spark平台高效地实现推荐系统CF算法中的物品相似度计算. 在推荐系统中,最经典的推荐算法无疑是协同过滤(Collaborative Filtering, CF),而item-cf又是CF算法中一个实现简单且效果不错的算法. 在item-cf算法中,最关键的步骤是计算物品之间的相似度.本文以代码实例来说明如何利用Spark平台快速计算物品间的余弦相似度. Cosine Similarity是相似度的一种常用度量,根据<推荐系统实践>一

Spark调研笔记第4篇 - PySpark Internals

其实,有两个名为PySpark的概念,一个是指Spark客户端内置的pyspark脚本,而另一个是指Spark Python API中的名为pyspark的package. 本文只对第1个pyspark概念做介绍. 1. Spark客户端内置的pyspark"命令" Spark客户端支持交互模式以方便应用调试,通过调用pyspark可以进入交互环境: cd /path/to/spark/ && ./bin/pyspark 用编辑器查看可知,pyspark其实是个shel

日志收集系统Flume调研笔记第1篇 - Flume简介

用户行为数据的收集无疑是构建推荐系统的先决条件,而Apache基金会下的Flume项目正是为分布式的日志收集量身打造的,本文是Flume调研笔记的第1篇,主要介绍Flume的基本架构,下篇笔记将会以实例说明Flume的部署和使用步骤. 本文所用的Flume版本为目前最新版的ver1.5.2,它属于Flume-NG,在系统架构上与Flume-OG有所区别,二者的不同可以参考FlumeWiki文档的说明. 1. Flume是什么 Flume是Apache基金会下的一个开源项目,它实现了一套分布式的.

iOS开发多线程篇 09 —NSOperation简单介绍

iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作?:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会?动将NSOperationQueue中的NSOpe