Apache Spark机器学习.1.5 Spark RDD和DataFrame

1.5 Spark RDD和DataFrame


本节关注数据以及Spark如何表示和组织数据。我们将介绍Spark RDD和DataFrame技术。

通过本节的学习,读者将掌握Spark的两个关键概念:RDD和DataFrame,并将它们应用于机器学习项目。

1.5.1 Spark RDD

Spark主要以一种分布式项集合的形式进行数据抽象,称之为弹性分布式数据集(Resilient Distributed Dataset,RDD)。RDD是Spark的关键创新,使其比其他框架计算更加快速和高效。

特别地,RDD是不可改变的对象集合,分布在集群之中。它静态地定义对象类型,例如RDD[T]对象类型则是T,主要有字符串RDD、整数RDD和对象RDD。

此外,RDD:

是基于用户划分的分布在集群上的对象集合

由并行转换器(如map和filter)创建

也就是说,RDD物理上分布在一个集群上,逻辑上作为一个实体进行操作。RDD具有容错特性,可以自动进行失效重建。

新的RDD可以从Hadoop输入格式化(HDFS文件)创建,或通过其他RDD进行转换得到。

创建RDD,用户可以:

通过驱动程序将对象集合分散化(使用Spark上下文的并行化方法)

加载外部数据集

转换已有的RDD

Spark团队称上述两类RDD操作为:行动(action)和转换(transformation)。

行动返回结果,转换返回新RDD的指针。RDD行动的例子有:collect、count和take。

转换是延迟评估的,RDD转换的例子有:map、filter和join。

RDD的行动和转换可以组合起来实现复杂的运算。

了解更多RDD的知识,可访问https://www.cs.berkeley.edu/~matei/papers/ 2012/ nsdi_spark.pdf。

1.5.2 Spark DataFrame

DataFrame是一个列数据组成的分布式数据集合,实际上,是按列的名字分组的分布式数据集合,也就是带有模式的RDD。换句话说,Spark DataFrame是RDD的扩展。

DataFrame相当于每列具有名字命名,可以使用名字替代索引进行操作的RDD。

Spark DataFrame在概念上与R语言DataFrame等价,与关系数据库中的表类似,这项技术促进了机器学习社区快速接受Spark。用户可以(使用Spark DataFrame)直接操作列数据,而这是RDD所不具备的。具备了数据模式知识,用户可以利用自己熟悉的SQL数据操作技术来操作数据,可以从很多原始数据源创建Spark DataFrame,例如结构化关系数据文件、Hive表或已有的RDD。

Spark已经创建了特殊的DataFrame API和Spark SQL来处理DataFrame。Spark DataFrame API和Spark SQL都支持Scala、Java、Python和R语言。作为已有RDD API的扩展,DataFrame API具有下列特性:

具备(从单个笔记本电脑几KB数据到大型集群PB级数据)可伸缩计算能力

支持各类数据格式和存储系统

通过Spark SQL Catalyst优化器提供最先进的优化和代码生成

通过Spark与所有大数据工具和框架无缝集成

Spark SQL与Spark DataFrame良好集成,有利于用户简便地进行ETL数据抽取和操作任何数据子集。用户可以对它们进行转换,并提供给包括R语言用户在内的其他用户。Spark SQL也可以与HiveQL一起使用,它的处理速度非常快。相对于使用Hadoop和直接使用RDD,使用Spark SQL可以大幅减少代码数量。

更多信息,请访问:http://spark.apache.org/docs/latest/sql-programming-guide.html。

1.5.3 R语言DataFrame API

DataFrame是机器学习编程的一个关键元素。Spark提供R语言、Java和Python的DataFrame API,以便用户在他们熟悉的环境和语言中操作Spark DataFrame。本节将简要介绍一下Spark DataFrame的操作,并提供一些简单的R语言例子,供读者实践。

在Spark环境中,所有相关功能的使用入口都是Spark的SQLContext类,或它的派生类。创建一个基本的SQLContext类,所有用户需要执行下面的SparkContext命令:

 

创建一个Spark DataFrame,用户可以执行如下命令:

 

下面给出一些Spark DataFrame操作的例子:

 

 

 

更多信息,请访问:http://spark.apache.org/docs/latest/sql-programming-guide.html#creating-dataframes。

1.5.4 机器学习框架、RM4E和Spark计算

本节,我们以RM4E作为例子讨论机器学习的框架,以及其与Spark计算的关系。

学习完本节之后,读者将掌握机器学习的概念和一些例子,并能够将它们与Spark计算相结合来规划和实现机器学习项目。

1.5.5 机器学习框架

正如前几节所讨论的,Spark计算与Hadoop的MapReduce非常不同,Spark计算速度更快,使用更加容易。在机器学习中采用Spark计算有很多的优势。

然而,对于机器学习专业人员来讲,只有具有良好的机器学习框架才能实现所有的优势。这里,机器学习框架意味着一个能够整合包括机器学习算法在内的所有机器学习元素的系统或方法,使用户最有效地使用它们。具体来讲,这包括数据表示与处理的方法、表示和建立预测模型的方法、评价和使用建模结果的方法。从这方面来看,在数据源的处理、数据预处理的执行、算法的实现,以及复杂计算支持方面的不同,使得机器学习框架与众不同。

目前有多种机器学习框架,正如有多种不同的计算平台支持这些框架。在所有可用的机器学习框架中,着重于迭代计算和交互处理的框架被公认为是最好的,因为这些特性可以促进复杂预测模型估计和研究人员与数据间的良好交互。当下,优秀的机器学习框架仍然需要包含大数据功能、大量快速处理能力,以及容错能力。优秀的框架通常包括大量的机器学习算法和可用的统计检验。

正如前几节提到的,由于采用了内存数据处理技术,Apache Spark拥有卓越的交互计算性能和较高的性价比。它可以兼容Hadoop的数据源和文件格式,由于拥有友好的API,它提供多种语言版本,另外它还具有更快速的学习曲线。Apache Spark还包含图像处理和机器学习能力。基于以上原因,以Apache Spark为基础的机器学习框架在机器学习从业者中很受欢迎。

尽管如此,Hadoop MapReduce是一个更加成熟的平台,它就是为解决批处理问题应运而生。相较于Spark,它对于处理一些无法放入内存或者由于有经验的研究人员追求更好的可用性的这类大数据来说更加高效。此外,由于具有更多的支持项目、工具和云服务,Hadoop MapReduce目前拥有更加庞大的生态系统。

即使目前看来Spark像是更大的赢家,但是机器学习从业者也很可能不只使用Spark平台,他们仍会使用HDFS存储数据,也可能会使用HBase、Hive、Pig、Impala,或者其他Hadoop工具。很多情况下,这意味着机器学习从业者为了处理全部的大数据程序包,仍需要运行Hadoop和MapReduce。

1.5.6 RM4E

在前几节,我们大致讨论了机器学习框架。具体来说,一个机器学习框架包括如何处理数据,分析方法,分析计算,结果评估和结果利用,RM4E可以很好地代表满足上述需求的框架。RM4E(Research Methods Four Elements)是总结机器学习组件和过程的一个很好的框架。RM4E包括:

方程:方程用来表示我们研究的模型。

估计:估计将方程(模型)和研究用数据联系起来。

评估:评估用来衡量模型是否适合数据。

解释:解释是将方程(模型)和我们的研究目标联系起来。我们如何解释研究结果通常依赖于研究目的和研究主体。

RM4E是区别一个机器学习方法的四个关键方面。在任意给定时刻,RM4E足以代表机器学习状态。此外,使用RM4E可以简便、充分地表示机器学习的工作流。

关联我们目前讨论的内容,方程类似于机器学习库,估计代表计算完成的方式,评估是评价一个机器学习是不是更好,至于迭代计算,是我们应该考虑继续还是停止。解释也是机器学习的关键部分,因为我们的目标是将数据转换为可使用的有见地的结果。

基于以上讨论,好的机器学习框架需要处理大规模数据提取和数据预处理,还需要处理快速计算、大规模和高速的交互式评估,以及简单易懂的结果解释和部署。

1.5.7 Spark计算框架

在本章前几节,我们讨论了Spark计算如何支持迭代机器学习计算。回顾机器学习框架,以及Spark计算如何与机器学习框架相关联之后,我们已经准备好去了解更多选择Spark计算用于机器学习的原因。

Spark是为服务机器学习和数据科学而开发的,能够使得大规模的机器学习和机器学习部署更加容易。如前所述,Spark在RDD上的核心创新使其具有快速方便的计算能力和良好的容错能力。

Spark是通用计算平台,其程序包括两个部分:驱动程序和工作程序。

为了编程,开发者需要编写一个执行应用高级控制流程,以及并行启动各种操作的驱动程序。所有开发的工作程序将在集群节点或在本地线程上运行,RDD操作会贯穿所有的工作程序。

正如前面提到的,Spark提供了并行编程的两个主要抽象概念:弹性分布式数据集以及对这些数据集的并行运算(通过将一个函数应用在数据集上来调用)。

此外,Spark支持两种类型的共享变量:

广播变量:如果有大量的只读数据段(例如,查找表)被用在多个并行操作中,最好是一次性将其分配给工作程序,而不是用每个闭包来打包。

累加器:这些变量工作程序只能添加到关联操作中,并且只能由驱动程序读出。它们可以在MapReduce中用来实现计数器,并且可以为并行求和提供一个更为必要的语法。可以为具有附加操作和零值的任何类型定义累加器。由于它们的语义只能添加,它们很容易具备容错能力。

总而言之,Apache Spark计算框架能够支持各种需要快速并行处理,并带有容错机制的机器学习框架。

更多内容请见如下网址:http://people.csail.mit.edu/matei/papers/2010/hotcl-o-ud_spark.pdf。

时间: 2024-09-21 13:02:56

Apache Spark机器学习.1.5 Spark RDD和DataFrame的相关文章

《 Apache Spark机器学习.》导读

本节书摘来自华章出版社< Apache Spark机器学习.>一书中作者[美] 刘永川(Alex Liu) 著 闫龙川 高德荃 李君婷 译  前 言 作为数据科学家和机器学习专业人员,我们的工作是建立模型进行欺诈检测.预测客户流失,或者在广泛的领域将数据转换为洞见.为此,我们有时需要处理大量的数据和复杂的计算.因此,我们一直对新的计算工具满怀期待,例如Spark,我们花费了很多时间来学习新工具.有很多可用的资料来学习这些新的工具,但这些资料大多都由计算机科学家编写,更多的是从计算角度来描述.

Apache Spark机器学习.1.1 Spark概述和技术优势

摘要 Spark机器学习简介 本章从机器学习和数据分析视角介绍Apache Spark,并讨论Spark中的机器学习计算处理技术.本章首先概括介绍Apache Spark,通过与MapReduce等计算平台进行比较,展示Spark在数据分析中的技术优势和特点.接着,讨论如下五个方面的内容: 机器学习算法与程序库 Spark RDD和DataFrame 机器学习框架 Spark pipeline技术 Spark notebook技术 以上是数据科学家或机器学习专业人员必须掌握的五项最重要的技术内容

Apache Spark机器学习.1.9 小结

1.9 小结 本章介绍了Apache Spark所有的基础知识,这也是所有想把Apache Spark应用于机器学习实际项目的从业者必须理解掌握的.我们重点探讨了Apache Spark计算,并涉及一些最重要的机器学习组件,以便把Apache Spark和机器学习关联起来,让开展机器学习项目的读者做好充分准备. 第一,我们作了Spark总体概述,还讨论了Spark优点以及面向机器学习的Spark计算模型. 第二,我们回顾了机器学习算法,Spark的MLlib库和其他机器学习库. 第三,讨论了Sp

Apache Spark机器学习.1.2 在机器学习中应用Spark计算

1.2 在机器学习中应用Spark计算 基于RDD和内存处理的创新功能,Apache Spark真正使得分布式计算对于数据科学家和机器学习专业人员来说简便易用.Apache Spark团队表示:Apache Spark基于Mesos 集群管理器运行,使其可以与Hadoop以及其他应用共享资源.因此,Apache Spark可以从任何Hadoop输入源(如HDFS)中读取数据.   Apache Spark计算模型非常适合机器学习中的分布式计算.特别是在快速交互式机器学习.并行计算和大型复杂模型情

Apache Spark机器学习.2.1 访问和加载数据集

摘要 Spark机器学习的数据准备 机器学习从业者和数据科学家时常耗费70%或80%的时间为机器学习项目准备数据.数据准备可能是很艰辛的工作,但是它影响到接下来的各方面工作,因此是非常必要和极其重要的.所以,在本章中,我们将讨论机器学习中所有必要的数据准备方面的内容,通常包括数据获取.数据清洗.数据集连接,再到特征开发,从而让我们为基于Spark平台构建机器学习模型准备好数据集.具体而言,我们将讨论前面提到的以下6个数据准备任务,然后在针对复用性和自动化的讨论中结束本章: 访问和加载数据集 开放

Apache Spark机器学习.2.5 数据集连接

2.5 数据集连接 本节,我们将介绍数据连接的技术,并讨论Spark处理数据连接的特有的特征,以及一些使工作更容易进行的数据连接解决方案. 学习完本节,我们将有能力按照各类机器学习需要做数据连接. 2.5.1 数据连接及其工具--Spark SQL 为机器学习项目准备数据集时,我们一般需要组合多个数据集.关系表通过主键和外键进行连接. 连接两个及以上的数据集听起来容易,但做起来非常有挑战,并且非常耗时.在SQL语句中,SELECT是最常用的命令.作为例子,下面是一个执行连接的典型的SQL代码:

Apache Spark机器学习.2.4 数据集重组

2.4 数据集重组 本节,我们介绍数据集重组技术.我们将讨论一些特殊的Spark数据重组特征,以及一些可以用在Spark notebook中基于R语言数据重组的特别方法. 学习完本节,我们可以根据不同的机器学习需要进行数据集重组. 2.4.1 数据集重组任务 数据集重组虽然听起来比较容易,但还是很有挑战,并且非常耗时. 有两个常见的数据重组任务:一是,获取一个用于建模的数据子集:二是,以更高的层次汇总数据.例如,我们有学生数据,但是我们需要一些班级层面的数据集.为此,我们需要计算学生的一些属性,

Apache Spark机器学习.1.4 MLlib

1.4 MLlib MLlib是一个可扩展的Spark机器学习库,包括很多常用的机器学习算法.MLlib内置的算法如下: 以向量和矩阵形式处理数据 基本的统计计算,例如:汇总统计和相关性.简单随机数生成.分层抽样.执行简单的假设检验 分类和回归建模 协同过滤 聚类 降维 特征提取与转换 频繁模式挖掘 开发优化 PMML模型导出 Spark MLlib还处在活跃开发阶段,预计每次新版发布都会有新的算法加入其中. MLlib符合Apache Spark的计算哲学,简单易用,性能卓越. MLlib使用

Apache Spark机器学习.1.7 机器学习工作流示例

1.7 机器学习工作流示例 为了进一步了解学习机器学习的工作流,在这里让我们学习一些例子. 本书后续章节会研究风险建模.欺诈检测.客户视图.流失预测和产品推荐.对于诸如此类的项目,目标往往是确定某些问题的原因,或者建立一个因果模型.下面是使用工作流建立一个因果模型的一个例子. 1.检查数据结构,以确保更好地理解数据: 数据是横截面数据吗?是隐含着时间信息的合并数据吗? 是否使用了分类变量? 2.检查缺失值: 不知道或者忘记了一个答案可能会被记录为一个中立或特殊的类别 一些变量可能有很多缺失值 根