Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么(续)

关注公众号:登峰大数据,阅读Spark实战第二版(完整中文版),系统学习Spark3.0大数据框架!

如果您觉得作者翻译的内容有帮助,请分享给更多人。您的分享,是作者翻译的动力!

 

该过程包括四个步骤,每一步之后,数据到达一个区域:

1、接入数据——Spark可以接入来自各种来源的数据(参见第7、8和9章关于数据接入的内容)。如果找不到受支持的格式,可以构建自己的数据源。在这个阶段,我称数据为原始数据。这个区域命名为“集结区”、“着陆区”,甚至是“沼泽区”。

2、提高数据质量(DQ)——在处理数据之前,您可能希望检查数据本身的质量。DQ的一个例子是确保所有出生日期都在过去。作为这个过程的一部分,还可以选择混淆一些数据:如果在医疗保健环境中处理社会保险号(ssn),混淆数据可以确保开发人员或非授权人员无法访问这些ssn。在你的数据被清洗之后,我把这个阶段称为纯净数据区。你可能还会发现这个区域被称为数据探索区。

3、转换数据——下一步是处理数据。您可以将它与其他数据集连接,应用自定义函数,执行聚合,实现机器学习,等等。这一步的目标是获得丰富的数据,即分析工作的成果。大部分章节都讨论了转换。这个区域也可以称为生产区、黄金区、或操作区。

4、加载和发布——在ETL过程中,可以使用商业智能(BI)工具将数据加载到数据仓库中,调用api,或者将数据保存在文件中。结果就是为您的企业提供可操作的数据。

1.2.2数据科学场景中的Spark

数据科学家的方法与软件工程师或数据工程师略有不同,因为数据科学家以交互的方式关注数据转换部分。为此,数据科学家使用不同的工具,比如notebooks。notebooks的包括Jupyter, Zeppelin, IBM Watson Studio, 和Databricks Runtime运行时环境。

数据科学家的工作方式对您来说肯定很重要,因为数据科学项目将使用企业数据,您可能最终将数据交付给数据科学家,将他们的研究成果(如机器学习模型)应用到企业数据,或将他们的研究成果工业化。

因此,一个类似uml的序列图,如图1.6所示,将更好地解释数据科学家如何使用Spark。

如果你想了解更多关于Spark和数据科学的知识,你可以看看这些书:《PySpark in Action》《Mastering Large Datasets with Python》

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么(续)

图1.6数据科学家使用Spark的序列图:用户与notebook“对话”,notebook调用Spark。Spark直接处理数据接入。每个方块代表一个步骤,每个箭头代表一个序列。应该从顶部开始按时间顺序阅读图表。

在图1.6中描述的用例场景中,数据被加载到Spark中,然后用户将使用它,应用转换,并显示部分数据。显示数据并不是过程的结束。用户将能够以交互的方式继续操作。最后,笔记本用户可以将数据保存到文件或数据库中,或生成(交互式)报告。

1.3 可以用Spark做什么?

Spark用于各种各样的项目,所以让我们探索其中的几个。所有的用例场景都涉及到无法在一台计算机上处理的数据(又称大数据),因此需要计算机集群——专门用于分析的分布式操作系统。

随着时间的推移,大数据的定义也在不断演变,从具有五v特征的数据演变为“一台电脑无法容纳的数据”。我不喜欢这个定义;您可能知道,许多rdbms在多个服务器上分割数据。与许多概念一样,可能必须自己定义。希望这本书能对你有所帮助。

对我来说,大数据是企业中随处可见的数据集的集合,聚集在一个单一的位置,你可以在上面运行从基本分析到更高级的分析,比如机器学习和深度学习。这些更大的数据集可以成为人工智能(AI)的基础。计算机的大小或数量与此概念无关。

Spark通过其分析特性和本机分布式架构,可以处理大数据,无论您认为它是不是大数据,或者它是否适合一台或多台计算机。请记住,132列点阵打印机上的传统报表输出不是Spark的典型用例。让我们来看看几个真实的例子。

1.3.1 Spark预测NC餐厅的餐厅质量

在美国的大部分地区,餐馆为了经营需要接受当地卫生部门的检查,并根据这些检查对餐馆进行分级。等级越高并不意味着食物越好,等级越高并不意味着食物越好,例如在你去南方的旅行中,在某个小屋里烧烤过之后,它可能预示着你是否有生命危险。等级衡量的是厨房的清洁程度、食物储存的安全性,以及(希望如此)避免食物传播疾病的更多标准。

在北卡罗莱纳,餐馆的等级从0到100。每个县都提供餐馆等级的访问方式。

NCEatery.com是一个以消费者为导向的网站,上面列出了餐馆的检验等级。NCEatery.com的目标是集中这些信息,并对餐厅进行预测分析,看看我们是否能发现餐厅质量的模式。我两年前喜欢的这个地方是不是开始走下坡路了?

在网站的后端,Apache Spark接收来自不同国家的餐馆、检查和清洗数据集,对数据进行处理,并在网站上发布摘要。在运算阶段,会应用一些数据质量规则,以及机器学习来尝试投影检查和评分。Spark使用一个小型集群处理1.6×1021个数据点,并每18小时发布约2500个页面。这个正在进行的项目正在向更多的NC县推广。

1.3.2 Spark允许Lumeris快速传输数据

Lumeris是一家以信息为基础的医疗保健服务公司,总部位于密苏里州的圣路易斯。传统上,它帮助医疗保健提供者从他们的数据中获得更多的见解。该公司最先进的IT系统需要改进,以适应更多的客户,并从其拥有的数据中获得更强大的洞察力。

在Lumeris,数据工程流程的一部分,Apache spark接入成千上万的CSV文件存储在Amazon Simple Storage Service (S3),构建health-care-compliant HL7 FHIR资源,并将它们保存在一个专门的文档存储中,在那里他们可以使用现有的应用程序和新一代的客户机应用程序进行分析。

这一技术栈允许Lumeris继续增长,无论是在处理数据和应用方面。在这项技术的帮助下,Lumeris的目标是拯救生命。

1.3.3 Spark分析CERN的设备日志

CERN,即欧洲核研究组织,成立于1954年。它是大型强子对撞机(LHC)的所在地,这是一个27公里长的环,位于日内瓦,位于法国和瑞士边界下100米处。

巨大的物理实验在那里运行,产生每秒1 PB的数据。经过重要的过滤后,数据减少到每天900 GB。

在与Oracle、Impala和Spark进行了实验之后,CERN团队基于Spark,使其运行在OpenStack、拥有25万个CPU 核心的本地云上,设计了下一个CERN加速器日志记录服务(NXCALS)。这种令人印象深刻的架构的消费者是科学家、开发人员和应用程序。CERN的目标是处理更多的数据,并提高数据处理的总体速度。

1.3.4其他用例

Spark还涉及到许多其他的用例,包括以下这些:

  • 构建交互式数据分析工具,如IBM的Watson Studio和Databricks的notebooks

  • 监控电视频道如MTV或Nickelodeon的视频传输质量

  • 通过Riot Games公司,监控在线视频游戏玩家的不良行为,并准实时地调整玩家互动,以最大化所有玩家的积极体验

1.4为什么你会喜欢dataframe

在本节中,我的目标是让您喜欢上dataframe。你将学习到足够想要的东西,将在第3章和整本书中深入探索。dataframe既是数据容器又是API。

dataframe的概念对于Spark非常重要。然而,这个概念并不难理解。您将一直使用dataframe。在本节中,您将从Java(软件工程师)和RDBMS(数据工程师)的角度了解什么是dataframe。一旦您熟悉了其中的一些类比,我将用一个图表来总结。

拼写问题

在大多数文献中,您会发现dataframe的不同拼写:DataFrame。我决定接受最英式的写作方式,我同意,这对一个法国人来说可能有点奇怪。然而,尽管dataframe的宏伟壮观,它仍然是一个普通的名词,所以没有理由到处使用大写字母。这不是汉堡店!

1.4.1 Java视角下的dataframe

如果您的背景是Java,并且您有一些Java数据库连接(JDBC)经验,那么dataframe看起来就像ResultSet。它包含数据;它有一个API…

ResultSet和dataframe的相似性如下:

  • 数据可以通过一个简单的API访问。

  • 您可以访问schema。

以下是一些不同之处:

  • 不用next()方法浏览它。

  • 它的API可以通过用户定义函数(udf)进行扩展。您可以编写或封装现有代码并将其添加到Spark中。然后就可以以分布式模式访问这些代码了。您将在第16章中学习udf。

  • 如果希望访问数据,首先获取行,然后使用getter(类似于ResultSet)遍历行中的列。

  • 元数据是非常基本的,因为在Spark中没有主键或外键或索引。

在Java中,dataframe被实现为Dataset<Row>(发音为“行数据集”)。

1.4.2 RDBMS视角下的dataframe

如果您来自RDBMS背景,可能会发现dataframe就像一个表。以下是相似之处:

  • 数据以列和行来描述。

  • 列是强类型的。

以下是一些不同之处:

  • 数据可以嵌套,比如在JSON或XML文档中。第7章描述了这些文档的获取,您将在第13章中使用这些嵌套结构。

  • 你不能更新或删除行;因为那样做,实际上是创建了新的dataframe。

  • 您可以轻松地添加或删除列。

  • 在dataframe上没有约束、索引、主键或外键或触发器。

1.4.3dataframe的图形表示

dataframe是一个强大的工具,您将在整本书和您与Spark的旅程中使用它。它强大的API和存储能力使它成为辐射一切的关键元素。图1.7显示了一种想象API、实现和存储的方法。

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么(续)

图1.7 dataframe的图形表示,它在Java中的实现(Dataset<Row>),模式,和分区存储。作为一名开发人员,您将使用dataset API,它将允许您操作列和行。分区中的存储也可以访问,主要是为了优化;您将在第2章中了解更多关于分区的内容。

1.5你的第一个例子

现在是看第一个例子的时候了。您的目标是通过一个简单的应用程序运行Spark,该应用程序将读取文件,将其内容存储在一个dataframe中,并显示结果。您将学习如何设置您的工作环境,本书中将使用这些环境。还将学习如何与Spark交互并执行基本操作。

大多数章节都包含专门的实验,可以通过这些实验来学习Spark。每个实验都有一个数据集(尽可能多的是一个真实的数据集)以及一个或多个代码清单。

首先,您将执行以下操作:

  • 安装基本软件,您可能已经有了:Git、Maven、Eclipse。

  • 从GitHub克隆代码下载代码。

  • 执行这个示例,它将加载一个基本的CSV文件并显示一些行数据。

1.5.1推荐软件

本节提供了将在本书中使用的软件列表。所需软件的详细安装说明见附录A和B。

本书使用以下软件:

  • Apache Spark 3.0.0。

  • 主要是macOS Catalina,但也可以在Ubuntu 14到18和Windows 10上运行。

  • Java 8。我知道Java 11是可用的,但是大多数企业在采用新版本时都很慢(而且我发现Oracle最近的Java策略有点令人困惑)。到目前为止,只有Spark v3在Java 11上得到了认证。

示例将使用命令行或Eclipse。对于命令行,您可以使用以下命令:

  • Maven:这本书使用的版本是3.5.2,但是任何最新版本都可以。

  • Git版本2.13.6,但是任何最新版本都可以工作。在macOS上,你可以使用Xcode打包的版本。在Windows上,您可以从https://gitscm.com/download/win下载。如果你喜欢图形用户界面(gui),我强烈推荐Atlassian Sourcetree,你可以从www.sourcetreeapp.com下载它。

项目使用Maven的pom.xml结构,可以在许多集成开发环境(ide)中导入或直接使用。但是,所有可视化示例都将使用Eclipse。您可以使用比4.7.1 1a (Eclipse Oxygen)更早的Eclipse版本,但是Maven和Git集成在Eclipse的Oxygen版本中得到了增强。我强烈建议你至少使用 Oxygen版本,虽然现在已经很旧了。

1.5.2下载代码

源代码在GitHub上的一个公共存储库中。存储库的URL为 https://github.com/jgperrin/net.jgp.books.spark.ch01 .附录D非常详细地描述了如何在命令行中使用Git,以及如何使用Eclipse来下载代码。

1.5.3运行第一个应用程序

现在可以运行应用程序了!如果你有任何问题运行你的第一个应用程序,请参考附录R。

命令行

在命令行中,切换到工作目录:

$ cd net.jgp.books.spark.ch01

接着运行

$ mvn clean install exec:exec

Eclipse

导入项目之后(参见附录D),在项目浏览器中找到CsvToDataframeApp.java。右键单击该文件,然后选择Run As > 2 Java Application,如图1.8所示。在控制台中查看结果。

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么(续)

图1.8在project Explorer中带有项目树的Eclipse

不管你是使用命令行还是Eclipse,几秒钟后你的结果应该是这样的:

+---+--------+--------------------+-----------+--------------------+
| id|authorId| title|releaseDate| link|
+---+--------+--------------------+-----------+--------------------+
| 1| 1|Fantastic Beasts ...| 11/18/16|http://amzn.to/2k...|
| 2| 1|Harry Potter and ...| 10/6/15|http://amzn.to/2l...|
| 3| 1|The Tales of Beed...| 12/4/08|http://amzn.to/2k...|
| 4| 1|Harry Potter and ...| 10/4/16|http://amzn.to/2k...|
| 5| 2|Informix 12.10 on...| 4/23/17|http://amzn.to/2i...|
+---+--------+--------------------+-----------+--------------------+
only showing top 5 rows

现在,让我们来了解一下发生了什么。

1.5.4您的第一行代码

终于,您开始编码了!在上一节中,您看到了输出。现在运行您的第一个应用程序。它将获取一个session,要求Spark加载一个CSV文件,然后显示数据集的5行(最多)。清单1.1提供了完整的程序。

说到显示代码,存在两种学派:一种学派是显示摘要,另一种学派是显示所有代码。我属于后一种类型:我喜欢完整的例子,而不是片面的,因为我不想让你去找出缺失的部分或需要的包,即使它们是明显的。

Spark实战第二版(涵盖Spark3.0)--第1章 Spark究竟是什么(续)

虽然示例很简单,但您已经完成了以下工作:

  • 安装了与Spark一起工作所需的所有组件。(是的,就是这么简单!)

  • 创建可以在其中执行代码的会话。

  • 加载CSV数据文件。

  • 显示此数据集的五行。

现在,您已经准备好深入了解Apache Spark并更多地了解其底层的内容。

总结

  • Spark是一个分析操作系统;您可以使用它以分布式方式处理工作负载和算法。它不仅有利于分析:您可以使用Spark进行数据传输、大规模数据转换、日志分析等。

  • Spark支持SQL、Java、Scala、R和Python作为编程接口,但在本书中,我们主要关注Java(有时是Python)。

  • Spark的内部主数据存储是dataframe。dataframe将存储容量与API结合在一起。

  • 如果您有JDBC开发的经验,您将发现与JDBC ResultSet的相似之处。

  • 如果您有关系数据库开发的经验,那么您可以将一个dataframe与具有较少元数据的表进行比较。

  • 在Java中,dataframe被实现为数据集<Row>。

  • 您可以使用Maven和Eclipse快速设置Spark。火花不需要安装。

  • Spark并不局限于MapReduce算法:它的API允许将许多算法应用于数据。

  • 流媒体在企业中使用得越来越频繁,因为企业希望访问实时分析。火花支持流媒体。

  • 分析已经从简单的连接和聚合发展而来。企业希望计算机为我们思考;因此,Spark支持机器学习和深度学习。

  • 图计算是分析的一种特殊用例,但是Spark支持它们。