Spark核心概念介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

既然你已经在shell里运行了你的第一个Spark代码片段,是时候来学习在shell里面编程的更多细节了。

从上层看,每一个Spark程序都是由一个驱动程序组成,这个驱动程序在集群上发布各种各样的平行操作。驱动程序包含你的应用程序的main函数,定义在集群上的分布式数据集,并且将一些操作作用在这些数据集上。在之前的例子中,驱动程序是Spark shell本身,你只需要在里面输入你想要运行的操作就行了。

驱动程序通过一个SparkContext 对象访问Spark,一个SparkContext 对象代表了一个到计算集群的连接。在shell里,有一个自动为你创建的SparkContext 对象,就是sc变量。试着打印出sc变量来看看它的类型,就像例2-3 那样。

例2-3.  检查sc变量

>>> sc

<pyspark.context.SparkContext object at 0x1025b8f90>

一旦你有了一个SparkContext 对象,你就可以用它来创建RDD。在例2-1和2-2 中,我们调用sc.textFile()来创建了一个RDD, 这个RDD代表了一个文件中的文本行的集合。我们可以在这些行上执行不同的操作,例如count()。

(补充示例:

例2-1. Python line count

>>> lines = sc.textFile(“README.md”) #  创建一个叫lines的RDD

>>> lines.count() #  统计这个RDD中元素个数

127

>>> lines.first() #  获得这个RDD中的第一个元素

u’# Apache Spark’

例2-2. Scala line count

scala> val lines = sc.textFile(“README.md”) // 创建一个叫lines的RDD

lines: spark.RDD[String] = MappedRDD[…]

scala> lines.count() // 统计这个RDD中元素个数

res0: Long = 127

scala> lines.first() // 获得这个RDD中的第一个元素

res1: String = # Apache Spark

为了运行这些操作,驱动程序管理着一定数量的节点,这些节点被叫做executor 。例如,如果我们在一个集群上运行count() 操作,不同机器可能统计文本不同部分的文本行数。因为我们只是在本地运行Spark shell,所以它在单台机器上执行所有任务,但是你可以连接shell到一个集群来并行地分析数据。Figure 2-3显示了Spark如何在一个集群上运行。

Figure 2-3

最后,当传递函数给操作,并在集群上运行它们的时候,有大量Spark’的API可以考虑。例如,我们扩展README 示例,过滤掉那些不包含某个单词的行,比如单词Python ,具体代码显示在例2-4(Python)和例2-5(for Scala)。

例2-4. Python执行过滤的例子

>>> lines = sc.textFile(“README.md”)

>>> pythonLines = lines.filter(lambda line: “Python” in line)

>>> pythonLines.first()

u’## Interactive Python Shell’

例2-5. Scala执行过滤的例子

scala> val lines = sc.textFile(“README.md”) // 创建一个叫lines的RDD

lines: spark.RDD[String] = MappedRDD[…]

scala> val pythonLines = lines.filter(line => line.contains(“Python”))

pythonLines: spark.RDD[String] = FilteredRDD[…]

scala> pythonLines.first()

res0: String = ## Interactive Python Shell

传递函数给Spark

如果你对例lambda和=>这样的语法不熟悉,你也可以先定义函数,然后再把函数名传递给Spark。例如,在Python中:

def hasPython(line):

return “Python” in line

pythonLines = lines.filter(hasPython)

在Java中传递函数给Spark也是可能的,但是在这种情况下,它们被定义为类,这些类实现Function接口。例如:

JavaRDD<String> pythonLines = lines.filter(

new Function<String, Boolean>() {

Boolean call(String line) { return line.contains(“Python”); }

}

);

Java8中引入了看起来和Python和Scala中类似的函数简单写法,被称为lambda表达式。用这种语法实现上面的功能的代码如下:

JavaRDD<String> pythonLines = lines.filter(line -> line.contains(“Python”));

我们将在“Passing Functions to Spark”一节更加深入的讨论这个话题。

后面我们会讲述Spark API更多的细节,Spark这样神奇,只因为像filter这样的函数操作也是在整个集群上并行的执行的。也就是说,Spark自动获得你的函数(比如,line.contains(“Python”)),把它们传送到执行节点上。因此,你可以在单个驱动程序中写代码,然后让代码运行在多个节点上。第三章将更细致的讲解RDD API 。

时间: 2024-08-24 15:46:14

Spark核心概念介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)的相关文章

Spark的Python和Scala shell介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

Spark提供了交互式shell,交互式shell让我们能够点对点(原文:ad hoc)数据分析.如果你已经使用过R,Python,或者Scala中的shell,或者操作系统shell(例如bash),又或者Windows的命令提示符界面,你将会对Spark的shell感到熟悉. 但实际上Spark shell与其它大部分shell都不一样,其它大部分shell让你通过单个机器上的磁盘或者内存操作数据,Spark shell让你可以操作分布在很多机器上的磁盘或者内存里的数据,而Spark负责在集

(3)spark核心概念以及运行架构

spark核心概念 我们之前介绍了spark的核心RDD,它是spark操作的基本单元.但是对于spark集群来说你还需要它的其它概念,比如我们操作RDD的时候,资源由谁来管理.任务由谁来执行等等. application:就是我们基于spark开发的应用程序,比如我们写的py文件,一个py文件就可以看成是一个基于spark的应用程序,它是由一个driver进程和多个executor组成.driver和executor是什么先不用管,总之记住一个基于spark的应用程序=1个driver+多个e

Spark学习之路---Spark核心概念

Spark核心概念简介 一个Spark应用都由驱动器程序发起集群上的各种并发操作,一个驱动器程序一般包含多个执行器节点,驱动器程序通过一个SaprkContext对象访问saprk.RDD(弹性分布式数据集)----分布式的元素集合,RDD支持两种操作:转化操作.行动操作,如map.reduce函数.

Spark核心概念理解

本文主要内容来自于<Hadoop权威指南>英文版中的Spark章节,能够说是个人的翻译版本号,涵盖了基本的Spark概念.假设想获得更好地阅读体验,能够訪问这里. 安装Spark 首先从spark官网下载稳定的二进制分发版本号,注意与你安装的Hadoop版本号相匹配: wget http://archive.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz 解压: tar xzf spark-x.y.z-bin-di

单独的应用程序(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

在这次对Spark粗略的讲解过程中,我们还没有讲如何在单独的应用程序中使用Spark.撇开交互式运行来说,我们能在Java,Scala或这Python程序中连接Spark.与在shell中连接Spark相比,唯一的区别是,在程序中,你需要自己初始化SparkContext . 连接Spark的过程因语言而异.在Java和Scala中,你在你的应用程序的Maven依赖中添加对spark-core 的依赖就可以了.到写这本书的时候,Spark的最新版是1.2.0,它对应的Maven坐标是: grou

LXC快速入门(1)——核心概念介绍

博主最近忙...抽空再写

【Spark深入学习-11】Spark基本概念和运行模式

----本节内容------- 1.大数据基础 1.1大数据平台基本框架 1.2学习大数据的基础 1.3学习Spark的Hadoop基础 2.Hadoop生态基本介绍 2.1Hadoop生态组件介绍 2.2Hadoop计算框架介绍 3.Spark概述 3.1 Spark出现的技术背景 3.2 Spark核心概念介绍 4.Spark运行模式 4.1.Spark程序组成 4.2.Spark运行模式 5.参考资料 --------------------- 1.大数据基础 1.1 大数据平台基本框架

Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Build Lifecycle.Goal).用法(Archetype意义及创建各种项目).maven常用参数和命令以及简单故障排除.maven扩展(eclipse.cobertura.findbugs.插件开发).maven配置.较长,可根据个人需要有选择性的查看,比如先看用法再回过头来看核心概念 1.maven的用途maven是一个项目构建和管理的工具,提供了帮助管理 构建.文档.报告.依赖.sc

SparkStreaming(一)--核心概念及算子

1.环境 CDH 5.16.1 Spark 2.3.0.cloudera4 2.核心概念 官网: https://spark.apache.org/docs/2.3.0/streaming-programming-guide.html GitHub: https://github.com/apache/spark 2.1 StreamingContext 第一点 class StreamingContext private[streaming] ( _sc: SparkContext, _cp: