PySpark大数据分析与应用
上QQ阅读APP看书,第一时间看更新

1.1 大数据分析概述

在大数据时代,一切都被记录和数字化。人类社会的信息量急剧增长,个人可获取的信息量也呈指数增长。大数据是数据化趋势下的必然产物。然而,大数据的真正魅力并不在于数据的大小和丰富程度,而在于通过分析和挖掘大数据中的价值,帮助政府、企业和个人做出更明智的决策。

1.1.1 大数据的概念

大数据又被称为海量数据,目前学界对大数据的定义尚未统一。2008年9月,国际顶级期刊Nature推出了名为“Big Data”的专刊,首次正式提出了“大数据”这一专有名词,为大数据概念奠定了基础。2011年2月,同为国际期刊的Science也发表名为“Dealing with Data”的专刊,首次综合分析了大数据对人类生活造成的影响,并详细描述了人类面临的数据困境。2011年5月,麦肯锡全球研究院(McKinsey Global Institute)发布了报告“Big data: The next frontier for innovation, competition, and productivity”,首次给出了相对清晰的定义,即以数据规模是否能够被经典数据库及时处理来定义大数据,认为大数据是指数据规模大小超过经典数据库系统收集、存储、管理和分析能力的数据集。美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)和国际商业机器公司(International Business Machines Corporation,IBM)也各自对大数据进行了定义。NIST将大数据定义为“具有规模巨大、种类繁多、增长速度快和变化频繁的特征,需要可扩展体系结构来有效存储、处理和分析的广泛数据集”。IBM 则强调了大数据的“4V”特性,即Volume(数量)、Variety(多样)、Velocity(速度)和Value(价值),后来又加入了Veracity (真实性),形成了大数据的“5V”特性。

尽管学界至今对大数据的概念未达成一致定义,但大数据的“4V”特性得到了普遍认可,具体来说,大数据的“4V”特性如下所述。

(1)Volume,特指大数据的数据体量巨大。计算机中最小的数据存储基本单位是bit,按照从小到大的顺序给出所有单位,即 bit、byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、DB。1byte=8bit,从Byte开始,前后两个存储单位的换算关系按照进率1024(210)进行计算。当前典型的计算机硬盘容量为 TB 量级,而 PB 被认为是大数据的临界点。根据国际数据公司(International Data Corporation,IDC)发布的白皮书“Data Age 2025”预测,2025年全球数据量总和将达到175ZB。

(2)Variety,特指大数据的数据类型多样性。传统IT产业产生和处理的数据类型较为单一,主要是结构化数据。而现在的数据类型不再局限于结构化数据,更多的是半结构化或非结构化数据,如可扩展标记语言、邮件、博客、即时消息、图片、音频、视频、点击流、日志文件、地理位置信息等。多种数据类型的存在对数据的整合、存储、分析和处理能力提出了更高的要求。

(3)Velocity,特指大数据的数据产生、处理和分析的速度快。随着现代传感技术、网络技术和计算机技术的发展,数据的产生、存储、分析和处理的速度远远超出了人们的想象,业界对大数据的处理能力有一个称谓——“1秒定律”,这是大数据与传统数据或小数据的重要区别。

(4)Value,特指大数据的数据价值密度低但商业价值高。由于大数据的规模不断扩大,单位数据的价值密度在不断降低,但整体数据的价值却在提高。以监控视频为例,在连续不间断的监控过程中,可能只有一两秒的数据是有用的。现在许多学者和专家将大数据等同于黄金和石油,以表示其中蕴含的巨大商业价值。

综上所述,本书认为大数据是以容量大、种类多、产生与处理速度快以及价值密度低为主要特征的数据集合。由于大数据本身规模大、来源广且格式复杂,因此需要新的体系架构、技术、算法和分析方法来采集、存储和关联分析大数据,以期能够从中提取隐藏的有价值信息。需要注意的是,大数据是一个动态的定义,不同行业根据不同的应用有着不同的理解,其衡量标准也会随着技术的进步而改变。

1.1.2 大数据分析的概念

大数据分析是指对规模巨大、海量的数据进行分析。大数据分析的本质是依托大数据进行数据分析,进而挖掘数据蕴含的价值和知识。大数据分析基于传统的数据分析,又与传统的数据分析有所不同。

传统的数据分析(简称数据分析)是指用适当的统计分析方法对收集的大量数据进行分析,将数据加以汇总、理解并消化,以求最大化地开发数据的价值、发挥数据的作用。

数据分析的目的是将隐藏在一大批看似杂乱无章的数据背后的信息集中和提炼出来,总结出研究对象的内在规律。在实际工作中,数据分析能帮助管理者进行判断和决策,以便采取适当策略与行动。

数据分析支持有科学依据的数据驱动决策,决策应基于事实数据,而不单基于过去的经验或直觉。根据产生的结果,数据分析可以分为描述性分析、诊断性分析、预测性分析和预案性分析4个层次。

描述性分析(发生了什么)通过运用制表和分类、图形以及计算概括性数据来描述数据特征的各项活动,主要包括数据的频率分析、集中趋势分析、离散程度分析、分布以及基本的统计图形。描述性分析主要应用于对已发生事件进行描述,即发生了什么。在日常的工作中,职业人员养成每天上班第一时间查看数据的习惯,如查看实时数据,日、周、月报等,从而培养对数据的敏感性。

诊断性分析(为什么会发生)用于获得事件发生的原因,寻找影响这些事件发生的因素。诊断性分析一般建立在描述性分析之上,经过描述性分析对情况有了基本了解之后,需要对原因进行分析,寻找产生现象的原因和影响因素,从而做出相应的调整与优化。

预测性分析(可能发生什么)涵盖各种统计技术,如数据挖掘、机器学习等,分析当前和历史事实以对未来或未知事件做出预测。预测性分析用于对未来将要发生的事件进行预测,即预测未知事件的走向。

预案性分析(需要做什么)在基于预测性分析的结果上,规定、规范应该采取的行动,因此预案性分析也称为规范性分析。预案性分析的重点不仅是遵循哪个最优选项,也包括为什么选择这个选项。预案性分析提供可以推理的结果,可以获得优势或降低风险。

从描述性分析、诊断性分析、预测性分析到预案性分析,前面的分析是后面分析的基础,后面的分析是对前面分析的进一步深化。在日常生活、工作中遇见问题时,我们可以先从数据入手,找出问题,准确地定位问题,多角度寻找问题产生的原因,以数据为驱动,并为下一步的改正找到机会点。分析结果的价值越来越高,复杂度也越来越高。从时间维度上看,描述性分析、诊断性分析立足于过去,预测性分析、预案性分析更关注未来。

以统计学为直接理论工具的数据分析主要关注描述性分析和诊断性分析,在有限的数据集上使用传统的、简单的方法进行分析,获得发生的事件以及事件发生的原因。

在大数据时代,大数据具有容量大、种类多、产生与处理速度快、价值密度低等特点,这些特点增加了对大数据进行有效分析的难度,大数据分析成为当前探索大数据发展的核心内容。大数据分析主要侧重于预测性分析和预案性分析,在大规模的数据集和来源多样的复杂原始数据上进行分析,所使用的方法和模型更加复杂,期望能够从数据中挖掘、发现新的知识和新的规律。

新一代分布式框架、云计算等计算模式的出现提升了对数据的获取、存储、计算与管理能力,相比于传统的数据分析,大数据分析在思维方式上有以下4个颠覆性观点转变。

(1)全样而非抽样。对所有相关数据进行分析,不再基于抽样样本进行随机分析,通过观察所有数据寻找异常值进行分析。

(2)混杂而非纯净。数据量的大幅增加会使一些错误的数据混进数据集,但是因为数据量庞大,所以不必担心某个数据点会对整套分析造成不利影响。接收混杂的数据并从中受益,而不是以高昂的代价消除所有的不确定性,这是从“小数据”到“大数据”的转变。

(3)趋势而非精确。过去需要分析的数据很少,因而要求分析结果极其精确。现在数据如此之多,可以适当忽略微观层面上的精确度,这样会在宏观层面上拥有更好的洞察力。

(4)相关而非因果。不需要过于关注事物之间的因果关系,而是应该寻找事物之间的相关关系。虽然相关关系可能无法准确地解释某个事件为何会发生,但是它可以告诉我们某个事件已经发生了,而无需探究现象背后的原因。

1.1.3 大数据分析的流程

大数据分析源于业务需求,其完整的流程包括明确目的、数据采集与存储、数据预处理、分析与建模、模型评估以及可视化应用。

1.明确目的

每个大数据分析项目都有独特的业务背景和需要解决的问题。在项目开始之前,应考虑数据对象、商业目的、业务需求等问题。只有深入理解业务背景,明确数据分析目的,并确定分析思路,才能确保数据分析过程的有效性。一旦明确了目的,可以做指标的分解,为数据的采集、分析和处理提供清晰的指引方向。

2.数据采集与存储

根据指标的分解结果,可以确定数据选取范围,并采集目标数据。采集的数据可以来自企业内部数据库中的历史数据、Excel 表格数据、文本文件以及实时数据等。此外,互联网和行业领域相关数据也是重要的数据来源。数据类型可以分为结构化、半结构化和非结构化3类。与以往传统数据相比,大数据更多的是半结构化和非结构化的。传统的轻型关系数据库只能完成一些简单的查询和处理请求。当数据存储和处理任务超出轻型关系数据库能力范围时,需要对其进行改进。这时,可以利用大型分布式数据库、集群或云存储平台来完成数据的存储和处理。

3.数据预处理

数据预处理是大数据处理中不可或缺的环节。由于数据源的多样性以及数据传输中的一些因素,大数据的质量往往具有不确定性。噪声、冗余、缺失和数据不一致等问题严重影响了大数据的质量。为了获得可靠的数据分析和挖掘结果,必须利用数据预处理手段来提高大数据的质量。数据预处理包括数据合并、数据清洗、数据标准化、数据变换等,例如,可以将来自不同部门的数据表合并,补充部分数据缺失的属性值,统一数据格式、编码和度量,进行归一化处理,检测和删除异常数据,进行冗余检测和数据压缩等。数据预处理是一项相对烦琐的工作,并且可能需要花费较长的时间,数据预处理的工作量通常占据了整个大数据分析流程工作量的60%~80%。

4.分析与建模

分析与建模是大数据处理的核心环节,涵盖了统计分析、机器学习、数据挖掘和模式识别等多个领域的技术和方法。在分析阶段,可以采用对比分析、分组分析、交叉分析和回归分析等方法。综合考虑业务需求、数据情况、花费成本等因素,可以选择适合的方法进行建模,如分类、聚类、时间序列等。在实践中,对一个目标进行分析通常会使用多个模型。通过后续的模型评估过程,可以对模型进行优化和调整,以找到最适合的模型。

5.模型评估

模型评估对模型进行全面评估的过程,包括建模过程评估和模型结果评估。具体来说,建模过程评估主要关注模型的精度、准确性、效率和通用性等方面;而模型结果评估则需要考虑是否有遗漏的业务问题,以及模型结果是否解决了业务问题。这需要与业务专家合作进行评估。

6.可视化应用

将分析结果以可视化的形式呈现。数据可视化的目标是以图形方式清晰、有效地展示信息。通过不同角度的可视化图形,人们可以更好地解读数据的本质,更直观地解释数据之间的特征和属性情况,并更深入地理解数据和数据所代表事件之间的关联。最终,编写分析报告,并将分析结果应用于实际业务中,实现数据分析的真正价值——解决问题、创造商业价值并提供决策依据。

1.1.4 大数据分析的应用场景

大数据无处不在,应用于各行各业。大数据分析的应用场景是其在各行各业业务活动中的具体体现。以下是两个典型的应用场景。

1.个性化推荐

大数据分析一方面能够帮助用户发现有价值的信息,另一方面能够将信息推荐给可能感兴趣的用户,实现信息消费者和信息生产者的双赢。信息生产者通过分析用户的兴趣爱好,进行个性化推荐。每个用户所得到的推荐信息都是与自己的行为特征和兴趣有关的,而不是笼统的大众化信息。信息生产者利用大数据分析用户的兴趣点,可以帮助用户从海量信息中发现自己潜在的需求。例如,电子商务网站记录所有用户在站点上的行为,网站运营商可以根据不同数据特点对用户行为进行分析、处理,并分成不同区为用户推送推荐。社交网站的音乐、电影和图书推荐,以及媒体根据用户的品位和阅读习惯进行个性化推荐也是基于用户行为分析。

2.预测性分析

预测性分析是大数据分析的核心应用之一。它基于大数据和预测模型预测未来某事件发生的概率,让分析从“面向已经发生的过去”转向“面向即将发生的未来”。预测性分析的优势在于它可以将一个非常困难的预测问题转化为一个相对简单的描述问题,这是传统小数据集无法企及的。例如,设备管理领域可以通过物联网技术收集和分析设备上的数据流,包括连续用电、零部件温度、环境湿度和污染物颗粒等潜在特征,建立设备管理模型,预测设备故障,合理安排预防性维护,以确保设备正常作业,降低因设备故障带来的安全风险。此外,交通物流分析领域也可以通过业务系统和全球定位系统(Global Positioning System,GPS)获得数据,对客户使用数据构建交通状况预测分析模型,有效预测实时路况、物流状况、车流量、客流量和货物吞吐量等,进而提前补货,制定库存管理策略。公安机关、各大金融机构、电信部门等也可以利用用户基本信息、用户交易信息、用户通话短信信息等数据,识别可能发生的潜在欺诈交易,做到未雨绸缪。

1.1.5 大数据技术体系

大数据分析是基于大数据进行的数据分析,与传统数据分析的主要区别是数据来源广泛、规模庞大、形式多样化,对数据的计算处理速度要求高,尤其是实时处理方面。大数据分析围绕数据、平台和算法3个主要要素展开,其中,数据是加工处理的对象,平台是加工数据的载体和工具,算法是对数据进行加工的具体流程和方法。

由于大数据的规模庞大且类型多样,因此对平台的承载和支撑能力提出了更高的要求,相应的分析流程也与传统数据分析有所差异。

1.大数据采集框架

大数据采集框架负责从外部数据源采集数据,包括大数据收集、交换和消息处理系统等框架。典型的大数据采集开源框架有 Flume,数据交换开源框架有 Sqoop,消息处理系统开源框架有Kafka。通过这些框架能采集数量繁多、结构复杂、实时、流式数据。

① Flume是分布式海量日志采集、聚合和传输框架,属于Apache顶级项目。作为非关系数据采集工具,Flume 可近实时采集流式日志数据,经过滤、聚集后加载到 Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)等存储系统中。

② Sqoop是一款数据迁移工具框架,用于在关系数据库和Hadoop之间交换数据。利用Sqoop,可以将数据从MySQL、Oracle等关系数据库中导入Hadoop中,如HDFS、Hive中,也可以将数据从Hadoop导出到关系数据库中。

③ Kafka是发布/订阅的消息系统框架,其设计初衷是为处理实时数据提供统一、高通量、低等待的消息传递平台。作为分布式消息系统,Kafka 可以处理大量的数据,能够将消息从一个端点传递到另一个端点,能够在离线和实时两种大数据计算架构中处理数据。

2.大数据存储框架

大数据存储框架负责对大数据进行存储。典型的大数据存储框架包括HDFS、HBase、Cassandra、ScyllaDB、MongoDB、Accumulo、Redis、Ignite、Arrow、Geode、CouchDB、Kudu、CarbonData等。下面仅对HDFS和HBase做简要介绍。

HDFS是Hadoop的核心子项目,基于流数据模式访问和处理超大文件的需求而开发,数据在相同节点上以复制的方式进行存储,以实现将数据合并计算的目的。与传统的单机文件系统不同,HDFS 本质上是为了大量的数据能横跨成百上千台计算机而设计的,呈现给用户的是一个文件系统,而不是多文件系统。例如,获取/hdfs/tmp/file1的文件数据,引用的是一个文件路径,实际的数据存放在很多不同的计算机上。HDFS 的优点是作为具有高度容错性的系统,适合部署在廉价的计算机上,能提供高吞吐量的数据访问,非常适合在大规模数据集上应用。然而,HDFS 也存在一些缺点,如不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意修改文件等。

HBase 是一个分布式、面向列、非关系开源数据库,属于 Apache 顶级项目。作为高可靠性、高性能、面向列、可伸缩的分布式存储系统,HBase可在廉价的计算机服务器上搭建起大规模结构化存储集群,处理由成千上万的行和列组成的大型数据。此外,HBase还可以对分布式计算的结果数据进行随机、实时存储。

3.大数据计算框架

根据对时间的性能要求,大数据计算可分为批处理、交互式处理和实时处理。

批处理对时间要求最低,一般要求处理时间为分钟到小时级别,甚至天级别,它追求的是高吞吐率,即单位时间内处理的数据量尽可能大。

交互式处理对时间要求比较高,一般要求处理时间为秒级别,这类框架需要与使用者进行交互,因此会提供类结构查询语言(Structure Query Language,SQL)以便于用户使用。

实时处理对时间要求最高,一般要求处理时间延迟在秒级以内。

大数据计算框架主要有MapReduce、Spark、Flink、Storm等,相应介绍如下。

(1)MapReduce

Hadoop 是 Apache 软件基金会旗下的开源分布式计算平台,主要包括分布式存储HDFS、离线计算框架MapReduce、资源调度框架YARN共3部分,为用户提供系统底层细节透明的分布式基础架构。

MapReduce是一个分布式的离线计算框架,用于海量数据的并行运算,是Hadoop数据分析的核心。MapReduce框架使得开发人员在不会分布式并行编程的情况下,也可以将编写的业务逻辑代码运行在分布式系统上,开发人员可以将绝大部分的工作集中于业务逻辑上的开发,具体的计算只需要交给MapReduce框架即可。

MapReduce 的处理过程分为两个步骤:Map 和 Reduce。Map 对输入的数据进行并行处理,处理结果传给Reduce完成最后的汇总。但MapReduce对HDFS的频繁操作(计算结果持久化、数据备份、资源下载及重新洗牌等)导致磁盘输入/输出(Input/Output,I/O)成为系统性能的瓶颈,因此只适用于离线数据处理或批处理,而不支持对迭代式、交互式、流式数据进行处理。

(2)Spark

Spark 是通用的一栈式计算框架,是专为大规模数据处理而设计的快速、通用的计算框架。Spark是基于MapReduce算法实现的分布式计算,拥有MapReduce所具有的优点,但不同于 MapReduce 的是,程序中间输出和结果可以保存在内存中,从而不再需要读写HDFS。因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的算法中,高效地支持更多计算模式,包括交互式查询和流处理等。

Spark是MapReduce的替代方案,是对Hadoop的补充,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。Spark旨在成为运行批处理、数据流处理、交互处理、图形处理和机器学习等应用的整合平台。目前Spark已经成为大数据领域最热门的技术之一。关于Spark的具体内容将在1.2节中介绍。

(3)Flink

Flink是一个开源的、适用于流处理和批处理的分布式数据处理框架,其核心是一个流式的数据流执行框架。Flink旨在成为运行批处理、数据流处理、交互处理、图形处理和机器学习等应用的一栈式平台。Flink不仅具有支持高吞吐、低延迟和exactly-once(保证每条记录仅被处理一次)语义的实时计算能力,而且有基于流式计算引擎处理批量数据的计算能力,真正意义上实现了批流统一,同时Flink运行时本身也支持迭代算法的执行。Flink 流式计算模型实现了高吞吐、低延迟、高性能兼具的实时流式计算框架,而且完全兼容Hadoop。

由于众多优秀的特性,因此 Flink 成为开源大数据处理框架中的一颗新星。在全球范围内,越来越多的公司开始使用 Flink,Flink 渐渐成为企业内部主流的数据处理框架,也有逐渐成为下一代大数据处理框架标准的趋势。

(4)Storm

Storm是一个开源的分布式实时大数据处理系统。Storm擅长实时处理海量数据,而非批处理。Storm用于在容错和水平可扩展方法中处理大量数据。

Storm最初由内森·马兹创建,后来被推特收购并开源。2011年9月Storm正式发布, 2013年9月进入Apache“孵化”并于2014年9月17日“毕业”成为Apache顶级项目,短时间内Storm成了分布式实时处理系统的标准。Storm是用Java和Clojure编写的,使用Apache Thrift,能以任何语言编写拓扑(Topology)。Storm拥有毫秒级别的实时数据处理能力。随着Spark和Flink的发展,Storm市场占有率在逐渐降低,但目前它仍然是实时分析的领导者。

4.资源调度框架

资源调度框架主要有YARN和Mesos,如何提高资源利用率、降低运营成本是资源管理的任务。下面仅对YARN做简要介绍。

YARN(Yet Another Resource Negotiator)是Hadoop的资源管理和作业调度系统。作为Apache Hadoop的核心组件之一,YARN负责将系统资源分配给在Hadoop集群中运行的各种应用程序,并调度在不同集群节点上执行的任务。YARN是Hadoop 2.x中的新特性。它的出现其实是为了弥补MapReduce的不足,提高集群环境下的资源利用率,这些资源包括内存、磁盘、网络、I/O等。

YARN的基本思想是将资源管理和作业调度的功能分解为单独的守护进程(Daemon)。YARN 拥有一个全局 ResourceManager、每个应用程序的 ApplicationMaster 及每台计算机框架代理NodeManager。ResourceManager负责所有应用程序之间的资源分配。NodeManager负责容器(Container)的资源管理,监视其资源使用情况(CPU、内存、磁盘、网络等)并报告给ResourceManager。ApplicationMaster负责协调来自ResourceManager的资源,并与NodeManager一起执行和监视任务。

5.数据查询与分析框架

数据分析层直接与用户应用程序对接,为其提供易用的数据处理工具。为了让用户更轻松地分析数据,计算框架会提供多样化的工具,包括应用程序接口(Application Program Interface,API)、类SQL、数据挖掘软件开发工具包(Software Development Kit,SDK)等。典型的数据查询与分析框架有Hive、Spark SQL、Mahout等。

Hive是基于Hadoop的数据仓库工具,是Apache顶级项目。Hive可以将结构化数据文件映射为一张数据库表,并提供类SQL语句的Hive SQL(即HQL)查询功能,将SQL语句转换为MapReduce任务运行。Hive的优点在于学习成本低,可以通过HQL语句快速实现简单的MapReduce统计,而无需开发专门的MapReduce应用。然而,由于Hive底层默认是转换为 MapReduce行,而 MapReduce 的洗牌(Shuffle)阶段是基于磁盘进行的,因此Hive只适用于离线分析,并且效率比较低。

Mahout 是一个基于 Hadoop 的机器学习和数据挖掘的分布式框架,提供了一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更方便、快捷地创建智能应用程序。Mahout 包含了许多实现,包括聚类、分类、推荐(过滤)、频繁子项挖掘,其中核心的三大算法为推荐、聚类及分类。此外,通过使用 Hadoop库,Mahout可以有效地扩展到云环境中。

大数据技术体系庞大且复杂,在学习过程中,我们应该培养解决问题的自主能力。遇到问题时,可第一时间利用搜索引擎寻找解决方案,学会独立解决问题,充分利用互联网资源。在参考资料的选择上,应优先查阅官方文档,以便获得最权威、最准确的信息。同时,我们需要深入理解各个技术的思想与原理,积极提问、勤于思考。例如:MapReduce是如何分而治之的策略的?HDFS 数据到底存储在哪里,副本机制是如何工作的?YARN是什么,它的功能有哪些?Spark和Flink各自的优势和特点是什么?为什么Spark不能完全取代MapReduce?此外,我们还应该通过动手实践,来加深对大数据先进技术的理解,掌握大数据技术的精髓,走在时代前列,为国、为民服务。