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

摘要

Spark机器学习的数据准备

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

访问和加载数据集

开放可用的机器学习数据集

将数据集加载到Spark

使用Spark进行数据探索和可视化

数据清洗

处理数据缺失与不完整

基于Spark的数据清洗

数据清洗变得容易

一致性匹配

处理一致性问题

基于Spark的数据匹配

获得更好的数据匹配效果

数据重组

数据重组任务

基于Spark的数据重组

数据重组变得容易

数据连接

Spark SQL数据集连接

使用Spark SQL进行数据连接

数据连接变得容易

特征提取

特征提取的挑战

基于Spark的特征提取

特征提取变得容易

复用性和自动化

数据集预处理工作流

Spark pipelines预处理

数据集预处理自动化


2.1 访问和加载数据集


在本节,我们将回顾一些公开可用的数据集,并且讨论加载这些数据集到Spark的方法。然后,我们将回顾九种Spark上探索和可视化数据集的方法。

学习完本节,我们能够获取一些可用的数据集,把它们加载到Spark,然后开始对数据进行探索和可视化。

2.1.1 访问公开可用的数据集

就像程序开源运动使软件免费一样,也有非常活跃的数据开放运动,使得每一个研究者和分析师都可以自由获取这些数据。在全世界范围内,大多数国家政府收集的数据集是向公众开放的。例如http://www.data.gov/,这个网站有超过14万的数据集可供免费使用,包括农业、金融和教育等领域。

除了来自各政府机构的开放数据,许多研究机构也收集了很多非常有用的数据集,并且可被公众所用。这本书中我们将使用的有如下几个数据集:

印第安纳大学提供一个非常丰富的数据集,包括535亿个HTTP地址。想获取这些数据,请访问:http://cnets.indiana.edu/groups/nan/webtraffic/click-dataset/。

广为人知的加州大学欧文分校机器学习库提供超过300个数据集可供探索。想获取他们的数据集,请访问:https://archive.ics.uci.edu/ml/datasets.html。

匹兹堡大学的Tycho?项目提供了自1888年以来美国境内所有须向卫生署报告的疾病报告,这些报告以周为单位。想获取他们的数据集,请访问:http://www.tycho.pitt.edu/。

ICPSR拥有许多体量并不是很大,但是质量非常好,并且可用于研究的数据集。想获取他们的数据集,请访问:http://www.icpsr.umich.edu/index.html。

另外一个众所周知的数据集是1987年~2008年的航线性能数据,它的体量巨大,拥有1.2亿条记录,已经被用在许多研究和少量比赛中。想获取这些的数据集,请访问:http://statcomputing.org/dataexpo/2009/the-data.html。

2.1.2 加载数据集到Spark

有许多方法可以将数据集加载到Spark平台,或者直接连接数据源到Spark平台。由于Apache Spark每三周更新一次,其功能在不断提升,更新、更方便的加载数据方法,以及展现数据的方法有望能够及时提供给用户。

举例来说,在Spark 1.3版本以前, JdbcRDD是连接关系型数据源和传输数据元素到RDD的最受欢迎的方式。但是,从Spark 1.4版本开始,它通过一个内置的数据源API连接到任意一个使用Dataframe的 JDBC数据源。

加载数据并不是一个简单的任务,因为它通常涉及转换或解析原始数据,以及处理数据格式转换。Spark数据源API允许用户使用基于DataSource API的库来读取和写入来自不同系统的不同格式的DataFrame。同时,由于使用了Spark SQL查询优化器技术,Spark数据源API的数据存取功能十分高效。

想要加载DataFrame的数据集,最好使用sqlContext.load。为此,我们需要说明以下内容:

数据源名称:这是我们加载的数据源。

选项:对于特定的数据源有一些参数,例如,数据路径。

举例来说,我们可以使用下面的代码:

 

要导出数据集,用户可以使用dataframe.save或df.write来保存处理过的DataFrame到一个数据源。具体说明如下:

数据源名称:这是我们要保存的数据源。

保存模式:这是当数据已经存在时,我们应该做的。

选项:对于特定的数据源有一些参数,例如,数据路径。

creatExternalTable和SaveAsTable命令也是非常有用的。

有关使用Spark DataSource API的更多信息,请访问:https://databricks.com/blog/2015/01/09/spark-sql-data-sources-api-unified-data-access-for-the-spark-platform.html。

2.1.3 数据集探索和可视化

在Apache Spark中,有很多方法来进行一些数据集的初步探索和可视化,这些数据集可以使用不同的工具加载。用户可以直接通过Spark Shell使用Scala语言或Python语言。或者,用户可以使用notebook方法,就是在Spark环境中使用R语言或Python语言的notebook,类似DataBricks Workspace。另一种方法是使用Spark的MLlib。

或者,用户可以直接使用Spark SQL及其相关库,如广受欢迎的Panda库,进行一些简单的数据探索。

如果数据集已经转化成Spark DataFrame,用户可以使用df.describe().show()获取一些简单的含样本总体特征的统计数据,例如所有列(变量)的均值、标准差、最小值和最大值。

如果DataFrame有很多列,用户应当使用df.describe(column1, column2, …).show()语句来指定列,以便于仅获取他们感兴趣的列的描述性统计数据。你也可以只使用这个命令选择你需要的统计数据:

 

除此之外,一些经常使用的协方差、相关运算、交叉列表命令如下:

 

如果使用DataBricks workspace,用户可以创建R notebook,那么他们将回到熟悉的R语言环境中,并且可以访问所有的R语言程序包,他们可以使用notebook方法进行数据集的交互探索和可视化研究。看一看下面的例子:

 

 

从现在开始,我们将会大量地使用DataBricks Workspace,建议用户在https://accounts.cloud.databricks.com/registration.html#signup注册一个试用账号。在网站主菜单栏的左上角设置一些群集,具体如下:

 

然后,用户可以到相同的主菜单中,单击“Workspace”右侧的向下箭头并导航到“Create | New Notebook”,创建一个notebook,如下图所示:

 

当出现Create Notebook对话框时,需要执行以下操作:

为你的notebook输入一个唯一的名字。

对于语言,单击下拉菜单,选择R语言。

对于集群,单击下拉菜单并选择你之前创建的集群。

时间: 2024-10-27 21:02:54

Apache Spark机器学习.2.1 访问和加载数据集的相关文章

《 Apache Spark机器学习.》导读

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

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的关键创新,使其比其他框架计算更加快速和高效

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

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

Apache Spark机器学习2.6 特征提取

2.6 特征提取 在本节,我们的关注点将转向特征提取,特征提取是根据工作数据集中可用特征或信息扩展为新的特征或者变量.与此同时,我们将讨论一些Apache Spark中特征提取的特殊功能,以及Spark中与特征相关的便捷解决方案. 学完本节之后,我们能够针对各种各样的机器学习项目开发并组织特征. 2.6.1 特征开发的挑战 大部分的大数据机器学习项目通常都不能直接使用大数据集.例如,使用网络日志数据时,它经常以随机文本集形式呈现,显得非常混乱,我们需要从中提取对机器学习有用的信息和特征.例如,我

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.8 Spark notebook简介

1.8 Spark notebook简介 在本节中,我们首先讨论有关面向机器学习的notebook方法.然后,我们介绍R Markdown,以其作为一个成熟的notebook案例,最后介绍Spark中的R notebook. 学习完本节,读者将掌握notebook相关的方法和概念,并为将其用于管理和开发机器学习项目做好准备. 1.8.1 面向机器学习的notebook方法 notebook已经成为众人青睐的机器学习工具,因为该工具既能动态驱动,还具备可重复生成的特点. 大部分notebook接口

Apache Spark机器学习3.1 Spark整体视图

摘要 基于Spark的整体视图 通过第1章,我们建立起了Spark系统,根据第2章的内容,我们完成了数据准备.现在将进入Spark系统应用的新阶段:从数据中获得洞见. 根据Gartner等机构的研究结果,许多公司仅仅是因为缺乏其商业的整体视图而损失了大量的价值.本章我们将回顾机器学习的方法和获得商业整体视图的步骤,然后讨论Spark如何简单.快速地进行相关计算,同时通过一个实例,循序渐进地展示使用Spark从数据到整体视图的开发过程. Spark整体视图 整体视图的方法 特征准备 模型估计 模型

Apache Spark机器学习.2.2 数据清洗

2.2 数据清洗 在本节中,我们将回顾一些Spark平台上的数据清洗方法,重点关注数据不完备性.然后,我们将讨论一些Spark数据清洗方面的特殊特征,以及一些基于Spark平台更加容易的数据清洗解决方案. 学习完本节,我们将能够完成数据清洗,并为机器学习准备好数据集. 2.2.1 处理数据不完备性 对于机器学习,数据越多越好.然而,通常数据越多,"脏数据"也会越多--这意味着会有更多的数据清洗工作. 数据质量控制可能会有许多问题需要处理,有些问题可能很简单,如数据输入错误或者数据复制.