python中spark有什么功能_pySpark工具学习1-Spark简介

Apache Spark是一个功能强大的开源处理引擎,最初由Matei Zaharia开发,是加州大学伯克利分校博士论文的一部分。 Spark的第一个版本于2012年发布。从那时起,2013年,Zaharia共同创立并成为Databricks的首席技术官;他还在麻省理工学院担任斯坦福大学教授。与此同时,Spark代码库被捐赠给了Apache Software Foundation,并成为其旗舰项目。

Apache Spark快速,易用,允许您解决各种复杂的数据问题,无论是半结构化,结构化,流媒体和/或机器学习/数据科学。它还已成为大数据领域最大的开源社区之一,拥有来自250多个组织的1,000多名贡献者,以及遍布全球570多个地点的300,000多名Spark Meetup社区成员。

在本章中,我们将为理解Apache Spark提供入门知识。我们将解释Spark Jobs和API背后的概念,介绍Spark 2.0架构,并探索Spark 2.0的功能。

什么是Apache Spark?

Spark作业和API

回顾弹性分布式数据集(RDD),数据框架和数据集

审查Catalyst Optimizer和Project Tungsten

回顾Spark 2.0架构

什么是Apache Spark?

Apache Spark是一个开源强大的分布式查询和处理引擎。它提供了MapReduce的灵活性和可扩展性,但速度要快得多:当数据存储在内存中时,比Apache Hadoop快100倍,访问磁盘时最多可达10倍。

Apache Spark允许用户轻松读取,转换和聚合数据,以及训练和部署复杂的统计模型。 Spark API可以用Java,Scala,Python,R和SQL访问。 Apache Spark可用于构建应用程序或将它们打包为要部署在集群上的库,或通过笔记本交互式执行快速分析(例如,Jupyter,Spark-Notebook,Databricks笔记本和Apache Zeppelin)。

Apache Spark是许多数据分析师,数据科学家或研究人员熟悉的库,他们使用过Python的pandas或R的data.frames或data.tables。值得注意的是,尽管Spark Data DataFrames对于pandas或data.frames / data.tables用户来说很熟悉,但是存在一些差异,所以请调整您的期望。具有更多SQL背景的用户也可以使用该语言来调整其数据。此外,Apache Spark提供了几种已经实现和调优的算法,统计模型和框架:用于机器学习的MLlib和ML,用于图形处理的GraphX和GraphFrames,以及Spark Streaming(DStreams和Structured)。 Spark允许用户在同一个应用程序中无缝地组合这些库。

Apache Spark可以轻松地在笔记本电脑上本地运行,但也可以通过YARN或Apache Mesos轻松部署在独立模式下 - 在本地群集或云端。它可以从各种数据源读取和写入,包括(但不限于)HDFS,Apache Cassandra,Apache HBase和S3。

图片.png

什么是Apache Spark?

在本节中,我们将简要介绍Apache Spark Jobs和API。为后续的Spark 2.0架构部分打基础。

执行过程(Execution process)

任何Spark应用程序都会在主节点上开始单个驱动程序进程(可以包含多个作业),然后将执行程序进程(包含多个任务)分配到多个工作节点,如下图所示:

图片.png

驱动程序进程根据为给定作业生成的图表确定指向执行程序节点的任务进程的数量和组成。注意,

任何工作节点都可以从许多不同的作业中执行任务。

Spark作业与直接非循环图(DAG direct acyclic graph)中组织的对象依赖关系链相关联,例如从Spark UI生成的以下示例。Spark可以优化调度(例如,确定所需的任务和工作人员数量)以及执行这些任务:

图片.png

弹性分布式数据集(Resilient Distributed Dataset)

Apache Spark围绕称为Resilient Distributed Datasets(简称RDD)的不可变Java虚拟机(JVM)对象的分布式集合构建。在我们使用Python时,重要的是要注意Python数据存储在这些JVM对象中。更多这方面将在随后的RDD和DataFrames章节中讨论。这些对象允许任何作业非常快速地执行计算。 RDD是针对,缓存和存储在内存中计算的:与Apache Hadoop等其他传统分布式框架相比,这种方案可以使计算速度提高数个数量级。

DataFrames

与RDD一样,DataFrame是在集群中的节点之间分布的不可变数据集合。但是,与RDD不同,DataFrames中的数据被组织到命名列中。

如果您熟悉Python的pandas或R data.frames,这是一个类似的概念。

DataFrames旨在使大型数据集处理变得更加容易。它们允许开发人员正式化数据结构,允许更高级别的抽象;从这个意义上讲,DataFrames类似于关系数据库世界中的表。 DataFrames提供了一个特定于域的语言API来操作分布式数据,并使Spark可以被更广泛的受众访问,而不仅仅是专业数据工程师。

DataFrames的主要优点之一是Spark引擎最初构建逻辑执行计划,并根据成本优化程序确定的物理计划执行生成的代码。与Java或Scala相比,Python上的RDD可能明显更慢,DataFrames的引入使所有语言的性能均衡。

数据集

在Spark 1.6中引入,Spark数据集的目标是提供一个API,允许用户轻松地表达域对象的转换,同时还提供强大的Spark SQL执行引擎的性能和优势。不幸,在撰写本书时,数据集仅在Scala或Java中可用。当它们在PySpark中可用时,我们将在以后的版本中介绍它们。但由于Python的动态特性,数据集API的已经可用(即您可以通过名称自然地访问行的字段row.columnName),R也类似。

Catalyst Optimizer

Spark SQL是Apache Spark中涉及技术最多的组件之一,因为它支持SQL查询和DataFrame API。 Spark SQL的核心是Catalyst Optimizer。优化器基于函数式编程结构,设计时考虑了两个目的:为Spark SQL添加新的优化技术和功能,并允许外部开发人员扩展优化器(例如,添加特定于数据源的规则,支持对于新数据类型,等等):

图片.png

Project Tungsten

Tungsten是Apache Spark执行引擎的伞形项目的代号。该项目专注于改进Spark算法,以便更有效地使用内存和CPU,从而将现代硬件的性能推向极限。

该项目的工作重点包括:

显式管理内存,以消除JVM对象模型和垃圾收集的开销

设计利用内存层次结构的算法和数据结构

在运行时生成代码,以便应用程序可以利用现代编译器并优化CPU

消除虚拟函数调度,以便减少了多个CPU调用

利用低级编程(例如,将即时数据加载到CPU寄存器)来加速内存访问并优化Spark的引擎以有效地编译和执行简单的循环

Spark 2.0架构

Apache Spark 2.*是当前的主要版本:

图片.png

Apache Spark 2.0发布的三个首要主题包括性能增强(通过Tungsten Phase 2),结构化流媒体的引入以及统一数据集和DataFrames。我们将描述数据集,因为它们是Spark 2.0的一部分,即使它们目前仅在Scala和Java中可用。

有关Apache Spark 2.0的更多信息,请参考:

统一数据集和数据框架

数据集是在2015年作为Apache Spark 1.6版本的一部分引入的。数据集的目标是提供类型安全的编程接口。这允许开发人员使用具有编译时类型安全性的半结构化数据(如JSON或键值对)(即,可以在生产应用程序运行之前检查生产应用程序的错误)。 Python没有实现数据集API的部分原因是因为Python不是类型安全的语言。

数据集API包含高级域特定语言操作,例如sum() , avg() , join() 和 group()。后一种特性意味着您具有传统Spark RDD的灵活性,但代码也更易于表达,读取和写入。与DataFrame类似,Datasets可以通过将表达式和数据字段暴露给查询规划器并利用Tungsten的快速内存中编码来利用Spark的催化剂优化器。

Spark API的历史:

图片.png

DataFrame和Dataset API的统一可能会对向后兼容性产生重大变化。DataFrame和Dataset都属于作为Apache Spark 2.0的一部分引入的新Dataset API:

图片.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值