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

简介:

2.2 数据清洗


在本节中,我们将回顾一些Spark平台上的数据清洗方法,重点关注数据不完备性。然后,我们将讨论一些Spark数据清洗方面的特殊特征,以及一些基于Spark平台更加容易的数据清洗解决方案。

学习完本节,我们将能够完成数据清洗,并为机器学习准备好数据集。

2.2.1 处理数据不完备性

对于机器学习,数据越多越好。然而,通常数据越多,“脏数据”也会越多——这意味着会有更多的数据清洗工作。

数据质量控制可能会有许多问题需要处理,有些问题可能很简单,如数据输入错误或者数据复制。原则上,解决他们的方法是类似的——例如,利用数据逻辑来实现探索和获取项目的本质知识,利用分析逻辑来纠正他们。为此,在本节中,我们将重点关注缺失值处理,以便说明在这个主题上Spark的使用方法。数据清洗涵盖了数据的准确性、完整性、独特性、时效性和一致性。

虽然听起来可能很简单,但是处理缺失值和不完备性并不是一件容易的事情。它涉及许多问题,往往需要以下步骤:

1.计算数据缺失百分比。

这取决于研究项目,有些项目中的比例如果低于5%或10%,我们可能不需要在数据缺失问题上花费时间。

2.学习数据缺失的模式。

数据缺失有两种模式:完全随机或不随机。如果数据缺失是完全随机的,我们可以忽略这个问题。

3.确定解决数据缺失模式的方法。

处理数据缺失有几种常用的方法。均值填充,缺失数据删除,数据替换是最为主要的方法。

4.为数据缺失模式执行数据填补。

为了处理数据缺失和不完整性,数据科学家和机器学习从业者通常会利用他们熟悉的SQL工具或R语言编程。幸运的是,在Spark环境中,有Spark SQL和R notebook可以让用户继续使用他们熟悉的方法,为此,我们将在下面两节中进行详细阐述。

数据清洗也包含其他的问题,诸如处理数据输入错误和异常值。

2.2.2 在Spark中进行数据清洗

在上一节中,我们讨论了处理数据不完备性。

安装Spark后,我们可以很容易地在DataBricks Workspace中使用Spark SQL和R notebook处理上一节中所描述的数据清洗工作。

特别需要指出的是,sqlContext中的sql函数使得应用程序能够完成SQL查询编程,并返回一个DataFrame类型的结果。

例如,借助R notebook,我们可以用下面的语句来执行SQL命令,并把结果放到一个data.frame:

 

数据清洗是一个非常繁琐和耗时的工作,在本节,我们想请你关注SampleClean,对于机器学习从业者,它可以使数据清洗更为简单,特别是分布式数据清洗。

SampleClean是建立在AMPLab伯克利数据分析栈(BDAS)上的一个可扩展的数据清洗库。该库使用Apache Spark SQL 1.2.0及以上版本和Apache Hive来支持分布式数据清洗操作和相关的脏数据查询处理。 SampleClean可以执行一组可互换和可组合的、物理和逻辑的数据清洗操作,这使得我们可以快速地构建和调整数据清洗pipelines。

我们先在Spark和SampleClean中输入以下命令开启工作:

 

使用SampleClean,我们需要创建一个名为SampleCleanContext的对象,然后使用该上下文来管理工作会话中所有的信息,并提供API基元与数据进行交互。 SampleCleanContext由SparkContext对象构造而成,具体如下:

 

2.2.3 更简便的数据清洗

使用SampleClean和Spark,我们可以把数据清洗工作变得容易,可以编写更少的代码,并利用更少的数据。

总体而言,SampleClean采用了一个很好的策略。它采用异步方式以规避延迟,并使用采样来规避数据体量巨大的问题。此外,SampleClean在一个系统中结合了所有三个方面因素(算法、机器和人),因此变得更加高效。

更多使用SampleClean的信息,请访问:http://sampleclean.org/guide/ 和http://sampleclean.org/release.html。

为了更好地说明,让我们假设一个有四个数据表的机器学习项目:

 

要清洗这个数据集,我们需要:

无论是使用SQL还是R语言命令,都要计算每个变量有多少个缺失值。

如果我们选择的策略是均值填充,那么用平均值填补缺失值。

尽管上述工作很容易实现,但是在数据体量巨大的情况下,这样做有可能非常耗时。因此,为了提高效率,我们可能需要将数据分割成许多子集,同时并行完成前面的步骤,Spark是完成此项工作的最佳计算平台。

在Databricks R notebook环境中,我们可以先用R语言命令sum(is.na(x))创建notebook来计算数据缺失的情况。

为了用平均值替代缺失值,我们可以使用下面的代码:

 

在Spark中,我们可以轻松地对所有的数据集群使用R notebook。

相关文章
|
2月前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
52 1
|
5月前
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
156 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
4月前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
66 0
|
4月前
|
分布式计算 Serverless 数据处理
EMR Serverless Spark 实践教程 | 通过 Apache Airflow 使用 Livy Operator 提交任务
Apache Airflow 是一个强大的工作流程自动化和调度工具,它允许开发者编排、计划和监控数据管道的执行。EMR Serverless Spark 为处理大规模数据处理任务提供了一个无服务器计算环境。本文为您介绍如何通过 Apache Airflow 的 Livy Operator 实现自动化地向 EMR Serverless Spark 提交任务,以实现任务调度和执行的自动化,帮助您更有效地管理数据处理任务。
221 0
|
5月前
|
分布式计算 Apache Spark
|
6月前
|
分布式计算 大数据 数据处理
Apache Spark在大数据处理中的应用
Apache Spark是大数据处理的热门工具,由AMPLab开发并捐赠给Apache软件基金会。它以内存计算和优化的执行引擎著称,提供比Hadoop更快的处理速度,支持批处理、交互式查询、流处理和机器学习。Spark架构包括Driver、Master、Worker Node和Executor,核心组件有RDD、DataFrame、Dataset、Spark SQL、Spark Streaming、MLlib和GraphX。文章通过代码示例展示了Spark在批处理、交互式查询和实时数据处理中的应用,并讨论了其优势(高性能、易用性、通用性和集成性)和挑战。【6月更文挑战第11天】
174 6
|
6月前
|
分布式计算 Spark 大数据
深入探究Apache Spark在大数据处理中的实践应用
【6月更文挑战第2天】Apache Spark是流行的开源大数据处理框架,以其内存计算速度和低延迟脱颖而出。本文涵盖Spark概述、核心组件(包括Spark Core、SQL、Streaming和MLlib)及其在数据预处理、批处理分析、交互式查询、实时处理和机器学习中的应用。通过理解Spark内部机制和实践应用,可提升大数据处理效率,发挥其在各行业的潜力。
|
7月前
|
机器学习/深度学习 数据采集 分布式计算
【机器学习】Spark ML 对数据进行规范化预处理 StandardScaler 与向量拆分
标准化Scaler是数据预处理技术,用于将特征值映射到均值0、方差1的标准正态分布,以消除不同尺度特征的影响,提升模型稳定性和精度。Spark ML中的StandardScaler实现此功能,通过`.setInputCol`、`.setOutputCol`等方法配置并应用到DataFrame数据。示例展示了如何在Spark中使用StandardScaler进行数据规范化,包括创建SparkSession,构建DataFrame,使用VectorAssembler和StandardScaler,以及将向量拆分为列。规范化有助于降低特征重要性,提高模型训练速度和计算效率。
137 6
|
7月前
|
机器学习/深度学习 分布式计算 算法
【机器学习】Spark ML 对数据特征进行 One-Hot 编码
One-Hot 编码是机器学习中将离散特征转换为数值表示的方法,每个取值映射为一个二进制向量,常用于避免特征间大小关系影响模型。Spark ML 提供 OneHotEncoder 进行编码,输入输出列可通过 `inputCol` 和 `outputCol` 参数设置。在示例中,先用 StringIndexer 对类别特征编码,再用 OneHotEncoder 转换,最后展示编码结果。注意 One-Hot 编码可能导致高维问题,可结合实际情况选择编码方式。
111 6
|
6月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
43 0

推荐镜像

更多