适合小白入门Spark的全面教程(二)

简介: 适合小白入门Spark的全面教程(二)

机器学习

Spark的MLlib是机器学习组件,在大数据处理方面很方便。 它消除了使用多种工具的需求,一种用于处理,一种用于机器学习。 Spark为数据工程师和数据科学家提供了一个功能强大,统一的引擎,既快速又易于使用。

8374f65c85a3241d2a0e25bab6911ff3.jpg

其它资料推荐:

SPARK MLLIB机器学习

http://www.aboutyun.com/forum.php?mod=viewthread&tid=24700


5.spark实践及概念、组件介绍



开始使用Spark的第一步是安装。 让我们在Linux系统上安装Apache Spark 2.1.0(我使用的是Ubuntu)。


安装
1.安装Spark的先决条件是安装Java和Scala。

2.如果未使用以下命令安装Java,请下载Java。



sudo apt-get install python-software-properties
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

3.从Scala Lang官方(http://www.scala-lang.org/)页面下载最新的Scala版本。 安装完成后,在〜/ .bashrc文件中设置scala路径,如下所示。


export SCALA_HOME=Path_Where_Scala_File_Is_Located
export PATH=$SCALA_HOME/bin:PATH

4.从Apache Spark下载页面(http://spark.apache.org/downloads.html)下载Spark 2.1.0。 您也可以选择下载以前的版本。

5.使用以下命令提取Spark tar。


tar -xvf spark-2.1.0-bin-hadoop2.7.tgz

6.在〜/ .bashrc文件中设置Spark_Path。


export SPARK_HOME=Path_Where_Spark_Is_Installed
export PATH=$PATH:$SPARK_HOME/bin

在我们下一步之前,在我们的系统上启动Apache Spark,并熟悉Spark的主要概念,如Spark Session,数据源,RDD,DataFrame和其他库。


Spark Shell:

Spark的shell提供了一种学习API的简单方法,以及一种以交互方式分析数据的强大工具。


Spark Session:

在早期版本的Spark中,Spark Context是Spark的入口点。 对于每个其他API,我们需要使用不同的上下文。 对于流式传输,我们需要StreamingContext,SQL sqlContext和hive HiveContext。 为了解决这个问题,SparkSession进入了这个问题。 它本质上是SQLContext,HiveContext和未来StreamingContext的组合。


数据源:

Data Source API提供了一种可插拔的机制,用于通过Spark SQL访问结构化数据。 Data Source API用于将结构化和半结构化数据读取并存储到Spark SQL中。 数据源不仅仅是简单的管道,可以转换数据并将其拉入Spark。


RDD:
弹性分布式数据集(RDD)是Spark的基本数据结构。 它是一个不可变的分布式对象集合。 RDD中的每个数据集被划分为逻辑分区,其可以在集群的不同节点上计算。 RDD可以包含任何类型的Python,Java或Scala对象,包括用户定义的类。


Dataset:

Dataset是分布式数据集合。 数据集可以从JVM对象构造,然后使用功能转换(map,flatMap,filter等)进行操作。 数据集API在Scala和Java中可用。


DataFrames:
DataFrame是命名列组织成数据集。 它在概念上等同于关系数据库中的表或R / Python中的数据框,但在引擎盖下具有更丰富的优化。 DataFrame可以从多种来源构建,例如:结构化数据文件,Hive中的表,外部数据库或现有RDD。


其中RDD是比较好理解的,dataset和dataframe可能弄不清他们之间的区别和联系推荐参考:

一图看懂Spark RDD Dataframe DataSet

http://www.aboutyun.com/forum.php?mod=viewthread&tid=24893


6.使用基于Hadoop的Spark



Spark与Hadoop兼容性的。 因此,这是一种非常强大的技术组合。 下面我们介绍spark与Hadoop整合的好处

8008e8a06955051c110696ac656fc978.jpg图:Spark功能

Hadoop组件可以通过以下方式与Spark一起使用:

  • HDFS:Spark可以在HDFS之上运行,以利用分布式存储。
  • MapReduce:Spark可以与MapReduce一起用于同一个Hadoop集群,也可以单独作为处理框架使用。
  • YARN:可以使Spark应用程序在YARN(Hadoop NextGen)上运行。
  • 批处理和实时处理:MapReduce和Spark一起使用,其中MapReduce用于批处理,Spark用于实时处理。


7.Spark 组件



Spark组件使Apache Spark快速可靠。 构建了很多这些Spark组件来解决使用Hadoop MapReduce时出现的问题。 Apache Spark具有以下组件:

  • Spark Core
  • Spark Streaming
  • Spark SQL
  • GraphX
  • MLlib (Machine Learning)

Spark Core

Spark Core是大规模并行和分布式数据处理的基础引擎。 核心是分布式执行引擎,Java,Scala和Python API为分布式ETL应用程序开发提供了一个平台。 此外,在核心上构建的其他库允许用于流式传输,SQL和机器学习的各种工作负载。 它负责:

  • 内存管理和故障恢复
  • 在群集上调度,分发和监视作业
  • 与存储系统交互


Spark Streaming


Spark Streaming是Spark的组件,用于处理实时流数据。 因此,它是核心Spark API的补充。 它支持实时数据流的高吞吐量和容错流处理。 基本流单元是DStream,它基本上是一系列用于处理实时数据的RDD(弹性分布式数据集)。


e61f16447580a5f54232fabf3f40796c.jpg图:spark streaming


Spark SQL


Spark SQL是Spark中的一个新模块,它使用Spark编程API实现集成关系处理。 它支持通过SQL或Hive查询查询数据。 对于那些熟悉RDBMS的人来说,Spark SQL将很容易从之前的工具过渡到可以扩展传统关系数据处理的边界。


Spark SQL通过函数编程API集成关系处理。 此外,它为各种数据源提供支持,并且使用代码转换编织SQL查询,从而产生一个非常强大的工具。


以下是Spark SQL的四个库。

  • Data Source API
  • DataFrame API
  • Interpreter & Optimizer
  • SQL Service

bb283509eadbba9ebcc8d888b6dc85ab.jpgGraphX

GraphX是用于图形和图形并行计算的Spark API。 因此,它使用弹性分布式属性图扩展了Spark RDD。


属性图是一个有向多图,它可以有多个平行边。 每个边和顶点都有与之关联的用户定义属性。 这里,平行边缘允许相同顶点之间的多个关系。 在高层次上,GraphX通过引入弹性分布式属性图来扩展Spark RDD抽象:一个定向多图,其属性附加到每个顶点和边。


为了支持图形计算,GraphX公开了一组基本运算符(例如,subgraph,joinVertices和mapReduceTriplets)以及Pregel API的优化变体。 此外,GraphX包含越来越多的图算法和构建器,以简化图形分析任务。


MlLib (Machine Learning)

MLlib代表机器学习库。 Spark MLlib用于在Apache Spark中执行机器学习。

754694bc7dfe474564482e09e42616ff.jpg

8.使用案例:使用Spark进行地震检测



现在我们已经理解了Spark的核心概念,让我们使用Apache Spark解决现实问题。 这将有助于我们有信心在未来处理任何Spark项目。


问题描述:设计实时地震检测模型以发送救生警报,这应该改善其机器学习,以提供接近实时的计算结果。


用例 - 要求:

  • 实时处理数据
  • 处理来自多个来源的输入
  • 易于使用的系统
  • 批量传输警报

我们将使用Apache Spark,它是满足我们要求的工具。

6995a483cdbd056bf6eb71beb788d764.jpg数据下载:

链接: https://pan.baidu.com/s/1sb5S42oKLdIBzaoJ11dGDA 密码: rx85


在继续前进之前,我们必须了解一个概念,即我们将在地震检测系统中使用它,它被称为接收器操作特性(ROC)。 ROC曲线是图解说明二元分类器系统的性能的图表,因为其辨别阈值是变化的。 我们将使用数据集在Apache Spark中使用机器学习获取ROC值。


用例 - 流程图:
下图清楚地解释了我们的地震检测系统涉及的所有步骤。

dff5182f5a07ba43938fa02be17f9f5d.jpg用例 - Spark实现:继续,现在让我们使用Eclipse IDE for Spark实现我们的项目。


找到下面的伪代码:

//Importing the necessary classes
import org.apache.spark._
...
//Creating an Object earthquake
object earthquake {
 def main(args: Array[String]) {
//Creating a Spark Configuration and Spark Context
val sparkConf = new SparkConf().setAppName("earthquake").setMaster("local[2]")
val sc = new SparkContext(sparkConf)
//Loading the Earthquake ROC Dataset file as a LibSVM file
val data = MLUtils.loadLibSVMFile(sc, *Path to the Earthquake File* )
//Training the data for Machine Learning
val splits = data.randomSplit( *Splitting 60% to 40%* , seed = 11L)
val training = splits(0).cache()
val test = splits(1)
//Creating a model of the trained data
val numIterations = 100
val model = *Creating SVM Model with SGD* (  *Training Data* , *Number of Iterations* )
//Using map transformation of model RDD
val scoreAndLabels = *Map the model to predict features* 
//Using Binary Classification Metrics on scoreAndLabels
val metrics = * Use Binary Classification Metrics on scoreAndLabels *(scoreAndLabels)
val auROC = metrics. *Get the area under the ROC Curve*()
//Displaying the area under Receiver Operating Characteristic
println("Area under ROC = " + auROC)
 }
}

从我们的Spark程序中,我们获得的ROC值为0.088137。 我们将转换此值以获得ROC曲线下的区域。


用例 - 可视化结果:
我们将绘制ROC曲线并将其与特定地震点进行比较。 如果地震点超过ROC曲线,这些点将被视为主要地震。 根据我们计算ROC曲线下面积的算法,我们可以假设这些主要地震在里氏震级上超过6.0级。

0cd326432c15244c17aef5271cdecf97.jpg上图显示了橙色的地震线。 蓝色区域是我们从Spark程序中获得的ROC曲线。 让我们放大曲线以获得更好的画面。


3bd73835acf8926204963604b07a7a1f.jpg我们已经根据ROC曲线绘制了地震曲线。 在橙色曲线高于蓝色区域的点处,我们已经预测地震是主要的,即幅度大于6.0。 因此,我们可以使用Spark SQL并查询现有的Hive表来检索电子邮件地址并向人们发送个性化的警告电子邮件。 因此,我们再次使用技术来拯救人类生活中的麻烦。

目录
相关文章
|
6月前
|
SQL 分布式计算 Spark
Spark 教程系列
Spark 教程系列
61 0
|
12月前
|
SQL 分布式计算 调度
Spark入门(一篇就够了)(三)
Spark入门(一篇就够了)(三)
257 0
|
4月前
|
分布式计算 Java Serverless
EMR Serverless Spark 实践教程 | 通过 spark-submit 命令行工具提交 Spark 任务
本文以 ECS 连接 EMR Serverless Spark 为例,介绍如何通过 EMR Serverless spark-submit 命令行工具进行 Spark 任务开发。
394 7
EMR Serverless Spark 实践教程 | 通过 spark-submit 命令行工具提交 Spark 任务
|
4月前
|
分布式计算 运维 Serverless
EMR Serverless Spark 实践教程 | 通过 EMR Serverless Spark 提交 PySpark 流任务
在大数据快速发展的时代,流式处理技术对于实时数据分析至关重要。EMR Serverless Spark提供了一个强大而可扩展的平台,它不仅简化了实时数据处理流程,还免去了服务器管理的烦恼,提升了效率。本文将指导您使用EMR Serverless Spark提交PySpark流式任务,展示其在流处理方面的易用性和可运维性。
269 7
EMR Serverless Spark 实践教程 | 通过 EMR Serverless Spark 提交 PySpark 流任务
|
3月前
|
分布式计算 Serverless 数据处理
EMR Serverless Spark 实践教程 | 通过 Apache Airflow 使用 Livy Operator 提交任务
Apache Airflow 是一个强大的工作流程自动化和调度工具,它允许开发者编排、计划和监控数据管道的执行。EMR Serverless Spark 为处理大规模数据处理任务提供了一个无服务器计算环境。本文为您介绍如何通过 Apache Airflow 的 Livy Operator 实现自动化地向 EMR Serverless Spark 提交任务,以实现任务调度和执行的自动化,帮助您更有效地管理数据处理任务。
201 0
|
3月前
|
分布式计算 Java Linux
【Deepin 20系统】Linux 系统安装Spark教程及使用
在Deepin 20系统上安装和使用Apache Spark的详细教程,包括安装Java JDK、下载和解压Spark安装包、配置环境变量和Spark配置文件、启动和关闭Spark集群的步骤,以及使用Spark Shell和PySpark进行简单操作的示例。
65 0
|
6月前
|
SQL 分布式计算 大数据
Spark开发实用技巧-从入门到爱不释手
Spark开发实用技巧-从入门到爱不释手
53 0
|
6月前
|
SQL 分布式计算 Hadoop
【Spark】Spark基础教程知识点
【Spark】Spark基础教程知识点
|
6月前
|
分布式计算 大数据 数据处理
[AIGC大数据基础] Spark 入门
[AIGC大数据基础] Spark 入门
294 0
|
6月前
|
分布式计算 资源调度 监控
Spark学习--1、Spark入门(Spark概述、Spark部署、Local模式、Standalone模式、Yarn模式)(一)
Spark学习--1、Spark入门(Spark概述、Spark部署、Local模式、Standalone模式、Yarn模式)(一)
199 1

相关实验场景

更多