京公网安备 11010802034615号
经营许可证编号:京B2-20210330
Spark一种快速数据分析替代方案
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoo 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
Spark 集群计算架构
虽然 Spark 与 Hadoop 有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark 是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。
Spark 还引进了名为 弹性分布式数据集 (RDD) 的抽象。RDD 是分布在一组节点中的只读对象集合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制可以维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD 被表示为一个 Scala 对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另一个 RDD 的转换形式;并且最终会彻底改变现有 RDD 的持久性,比如请求缓存在内存中。
Spark 中的应用程序称为驱动程序,这些驱动程序可实现在单一节点上执行的操作或在一组节点上并行执行的操作。与 Hadoop 类似,Spark 支持单节点集群或多节点集群。对于多节点操作,Spark 依赖于 Mesos 集群管理器。Mesos 为分布式应用程序的资源共享和隔离提供了一个有效平台(参见 图 1)。该设置充许 Spark 与 Hadoop 共存于节点的一个共享池中。
图 1. Spark 依赖于 Mesos 集群管理器实现资源共享和隔离。

Spark 编程模式
驱动程序可以在数据集上执行两种类型的操作:动作和转换。动作 会在数据集上执行一个计算,并向驱动程序返回一个值;而转换 会从现有数据集中创建一个新的数据集。动作的示例包括执行一个 Reduce 操作(使用函数)以及在数据集上进行迭代(在每个元素上运行一个函数,类似于 Map 操作)。转换示例包括 Map 操作和 Cache 操作(它请求新的数据集存储在内存中)。
我们随后就会看看这两个操作的示例,但是,让我们先来了解一下 Scala 语言。
Scala 简介
Scala 可能是 Internet 上不为人知的秘密之一。您可以在一些最繁忙的 Internet 网站(如 Twitter、LinkedIn 和 Foursquare,Foursquare 使用了名为 Lift 的 Web 应用程序框架)的制作过程中看到 Scala 的身影。还有证据表明,许多金融机构已开始关注 Scala 的性能(比如 EDF Trading 公司将 Scala 用于衍生产品定价)。
Scala 是一种多范式语言,它以一种流畅的、让人感到舒服的方法支持与命令式、函数式和面向对象的语言相关的语言特性。从面向对象的角度来看,Scala 中的每个值都是一个对象。同样,从函数观点来看,每个函数都是一个值。Scala 也是属于静态类型,它有一个既有表现力又很安全的类型系统。
此外,Scala 是一种虚拟机 (VM) 语言,并且可以通过 Scala 编译器生成的字节码,直接运行在使用 Java Runtime Environment V2 的 Java™ Virtual Machine (JVM) 上。该设置充许 Scala 运行在运行 JVM 的任何地方(要求一个额外的 Scala 运行时库)。它还充许 Scala 利用大量现存的 Java 库以及现有的 Java 代码。
最后,Scala 具有可扩展性。该语言(它实际上代表了可扩展语言)被定义为可直接集成到语言中的简单扩展。
Scala 的起源
Scala 语言由 Ecole Polytechnique Federale de Lausanne(瑞士洛桑市的两所瑞士联邦理工学院之一)开发。它是 Martin Odersky 在开发了名为 Funnel 的编程语言之后设计的,Funnel 集成了函数编程和 Petri net 中的创意。在 2011 年,Scala 设计团队从欧洲研究委员会 (European Research Council) 那里获得了 5 年的研究经费,然后他们成立新公司 Typesafe,从商业上支持 Scala,接收筹款开始相应的运作。
举例说明 Scala
让我们来看一些实际的 Scala 语言示例。Scala 提供自身的解释器,充许您以交互方式试用该语言。Scala 的有用处理已超出本文所涉及的范围,但是您可以在 参考资料 中找到更多相关信息的链接。
清单 1 通过 Scala 自身提供的解释器开始了快速了解 Scala 语言之旅。启用 Scala 后,系统会给出提示,通过该提示,您可以以交互方式评估表达式和程序。我们首先创建了两个变量,一个是不可变变量(即 vals,称作单赋值),另一个变量是可变变量 (vars)。注意,当您试图更改 b(您的 var)时,您可以成功地执行此操作,但是,当您试图更改 val 时,则会返回一个错误。
清单 1. Scala 中的简单变量
$ scalaWelcome to Scala version 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val a = 1a: Int = 1
scala> var b = 2b: Int = 2
scala> b = b + ab: Int = 3
scala> a = 26: error: reassignment to val
a = 2
^
接下来,创建一个简单的方法来计算和返回 Int 的平方值。在 Scala 中定义一个方法得先从def 开始,后跟方法名称和参数列表,然后,要将它设置为语句的数量(在本示例中为 1)。无需指定任何返回值,因为可以从方法本身推断出该值。注意,这类似于为变量赋值。在一个名为 3的对象和一个名为 res0 的结果变量(Scala 解释器会自动为您创建该变量)上,我演示了这个过程。这些都显示在 清单 2 中。
清单 2. Scala 中的一个简单方法
scala> def square(x: Int) = x*xsquare: (x: Int)Int
scala> square(3)res0: Int = 9
scala> square(res0)res1: Int = 81
接下来,让我们看一下 Scala 中的一个简单类的构建过程(参见 清单 3)。定义一个简单的Dog 类来接收一个 String 参数(您的名称构造函数)。注意,这里的类直接采用了该参数(无需在类的正文中定义类参数)。还有一个定义该参数的方法,可在调用参数时发送一个字符串。您要创建一个新的类实例,然后调用您的方法。注意,解释器会插入一些竖线:它们不属于代码。
清单 3. Scala 中的一个简单的类
scala> class Dog( name: String ) {
| def bark() = println(name + " barked")
| }defined class Dog
scala> val stubby = new Dog("Stubby")stubby: Dog = Dog@1dd5a3d
scala> stubby.barkStubby barked
scala>
完成上述操作后,只需输入 :quit 即可退出 Scala 解释器。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据统计分析、数据清洗、异常值识别与数据分布研究中,箱型图是最直观、高效、专业的可视化分析工具。相较于柱状图、折线图仅 ...
2026-05-29Tkinter是Python内置的标准GUI图形界面库,具备无需额外安装、调用简单、兼容性强、轻量化高效等优势,是Python快速开发桌面小程 ...
2026-05-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-05-29【核心关键词】大数据、经理、专业、金融、客户、传统、建模、数据产品、互联网金融、产品经理、数据分析、金融行业、数据模型 ...
2026-05-28 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-05-28随着大数据技术的快速普及,各行各业积累了海量的用户数据、交易数据、生产数据与行为数据。单纯的数据统计与报表分析只能呈现表 ...
2026-05-28在Python网络请求、接口测试、数据爬取、业务对接开发中,Requests库是最简洁、最高效的HTTP请求工具,凭借简洁的语法、完善的适 ...
2026-05-272025 年,零售与服务行业的竞争已从 “经验驱动” 全面转向 “数据驱动”。中小企业门店普遍面临数据零散、分析浅层、决策凭感觉 ...
2026-05-27 很多数据分析师每天都在写SQL,但当被问到“数据查询语言(DQL)的本质是什么”“SELECT语句中各子句的书写顺序与实际执行顺 ...
2026-05-27在统计学分析、实验研究、业务数据复盘过程中,单因素方差分析是检验自变量对因变量是否存在显著影响的核心方法。其中,两个水平 ...
2026-05-26【核心关键词】算法、客户、大数据、互联网、调优、建模、模型优化、机器学习、评分卡模型、模型开发、智能风控、业务场景、数 ...
2026-05-26 很多数据分析师写过无数个 SELECT,但当被问到“新建一张表,该如何定义字段类型来保证数据质量”“创建视图和存储物理表有 ...
2026-05-26在数据清洗、统计分析与数据质量检测工作中,箱型图(又称箱线图、Box Plot)是最直观、最高效的可视化分析工具之一。相较于柱状 ...
2026-05-25在大数据分析、数据清洗、质量管控、风险监测等领域,异常数据识别是保障数据质量、确保分析结论精准、规避业务决策失误的核心基 ...
2026-05-25 很多数据分析师精通Excel函数和透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么关系 ...
2026-05-25数字化经营时代,企业的市场竞争早已从经验决策转向数据决策。门店营收、用户转化、产品销量、成本损耗、存量资产等所有经营行为 ...
2026-05-22在MySQL数据库日常运维、业务数据校验、数据迁移与数据清洗场景中,自增主键ID的连续性校验是一项基础且关键的工作。MySQL的Auto ...
2026-05-22 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-05-22【核心关键词】大数据、可视化、存储、架构、客户、离线、产品、同步、实时、数据仓库、数据分析、数据可视化、存储数据、离线 ...
2026-05-21在电商流量红利消退、公域获客成本持续走高的当下,存量用户深度挖掘已成为店铺增收增效的核心抓手。相较于付费投放获取的陌生新 ...
2026-05-21