手把手带你玩转Spark机器学习-Spark的安装及使用

article/2025/10/19 15:45:00

系列文章目录

  1. 手把手带你玩转Spark机器学习-专栏介绍
  2. 手把手带你玩转Spark机器学习-问题汇总
  3. 手把手带你玩转Spark机器学习-Spark的安装及使用
  4. 手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换
  5. 手把手带你玩转Spark机器学习-使用Spark构建分类模型
  6. 手把手带你玩转Spark机器学习-使用Spark构建回归模型
  7. 手把手带你玩转Spark机器学习-使用Spark构建聚类模型
  8. 手把手带你玩转Spark机器学习-使用Spark进行数据降维
  9. 手把手带你玩转Spark机器学习-使用Spark进行文本处理
  10. 手把手带你玩转Spark机器学习-深度学习在Spark上的应用

文章目录

  • 系列文章目录
  • 前言
  • 一、Apache Spark的基础知识
    • RDD
    • DataFrame
  • 二、安装及使用Spark
  • 三、Spark编程模型及Spark python编程入门
    • SparkContext类与SparkConf类
    • 编写第一个Spark python应用程序:计算pi
  • 总结


前言

本文主要介绍了Apache的基础知识及Spark环境的搭建和运行。


一、Apache Spark的基础知识

在这里插入图片描述

Apache Spark TM

几年前,Spark被其创造者定义成:A fast and general engine for large-scale data processing(用于大规模数据处理的快速通用引擎)。

其中"Fast"意味着它比以前的大数据处理方法更快(例如Hadoop的Mapreduce)。更快的秘诀在于Spark在内存(RAM)上运行,这使得处理速度比在磁盘上快的多。

"General"部分意味着它可以用于多种用途,例如运行分布式SQL、创建数据管道、将数据存储到数据库、运行机器学习算法、处理图形、数据流等等。现在随着Apache Spark项目的发展,Spark几乎可以做数据科学或机器学习工作流程中的所有事情,我们也可以将Spark框架单独应用到深度学习这样的端到端项目中。

“Large-scale"意味着这是一个可以完美处理大量数据的框架,我们过去称之为"大数据”。

RDD

在这里插入图片描述

弹性分布式数据集(RDD)

Apache Spark的核心抽象和起源是弹性分布式数据集(RDD)。

RDD是可以并行操作且具有一定容错性的元素集合。你可以在驱动程序中并行创建现有集合,或引用外部存储系统中的数据集,例如共享文件系统、HDFS、HBase或任何提供Hadoop InputFormat的数据源。
在这里插入图片描述

RDD数据处理流程

关于Spark其中有个非常重要的点是所有的Transformation操作都是不立即生效的,换句话说,Spark不会立即计算它的结果。相反,Spark只是记录下来对某些基础数据(例如文件)的Transformation操作。这些Transformation操作只会在Action需要将结果返回给驱动程序的时候才进行计算操作。

默认情况下,每个Transformation后的 RDD 可能会在模每次对其运行操作时重新计算。但是,你也可以使用Persist(或Cache)方法将 RDD 持久化在内存中,在这种情况下,Spark 会将元素保留在集群上,以便下次查询时更快地访问它。Spark还支持在磁盘上持久化 RDD 或跨多个节点复制的操作。

DataFrame

在这里插入图片描述

DataFrame

从 Spark 2.0.0 开始,DataFrame 是一个被组织成带有字段名的数据集【表格数据】。它在概念上等同于关系数据库中的表或 R/Python 中的 DataFrame,但在底层进行了更丰富的优化。

如下图所示,DataFrames 可以从多种来源构建,例如:结构化数据文件、Hive 中的表、外部数据库或现有 RDD。
在这里插入图片描述

DataFrame数据来源

简而言之,Dataframes API 是 Spark creators 中的一种方法,可让你在框架中轻松使用数据。它们与 Pandas Dataframes 或 R Dataframes 非常相似,但有几个优点。第一个当然是它们可以被缓存在一个集群的内存里,因此它们可以处理大量数据,第二个是这种数据结构是经过特殊优化的,可以适配分布式环境。

在Spark发展起初,将 Spark 与 Scala 或 Java 一起使用要快得多。随着python语言越来越普及以及Spark整个生态的发展,使用 DF API,这不再是问题,现在我们可以在 R、Python、Scala 或 Java 中使用Spark获得相同的性能。
在这里插入图片描述

不同语言在Spark中操作数据的性能对比

负责此优化的是 Catalyst。你可以把它想象成一个“巫师”,它会接受你的查询( 类似 SQL 的查询,它们也会被并行化)和操作并针对分布式计算进行优化。
在这里插入图片描述

Caltayst数据处理流程

如上图所示,这个过程并不是那么简单,但作为程序员的你甚至不会注意到它,只是它一直在那里帮助你。 在 Spark 3.0 中,新增了一个“自适应查询执行”(AQE)的东西,它将根据在查询执行过程中收集到的统计信息重新优化和调整查询计划。这将对性能产生巨大影响,例如,假设我们正在运行查询

SELECT max(i) FROM table GROUP BY column

如果没有AQE,Spark将启动五个任务来进行最终数据的聚合:
在这里插入图片描述

无AQE的分区合并流程

但是使用 AQE,Spark 会将上图中间的三个小分区合并为一个,因此,最终聚合现在只需要执行三个任务而不是五个:

在这里插入图片描述

有AQE的分区合并流程

二、安装及使用Spark

注意:

  • "$"符号表示在shell中运行(但是不要复制该符号)
  • “>>>”符号表示 Python shell(不要复制该符号)

Spark能通过内置的单机集群调度器在本地运行。此时,所有的Spark进程运行在同一个java虚拟机中。这实际上构造了一个独立、多线程版本的Spark环境。本地模式很适合程序的原型设计、开发、调试和测试。同样它也适用于在单机上进行多核并行计算的实际场景。

Spark的本地模式和集群模式完全兼容,本地编写和测试过的代码仅需要增加少许设置便能在集群上运行。

  1. 下载预编译包

首先第一步访问Spark项目的下载页面:https://spark.apache.org/downloads.html。一版选择最新的Spark版本包
在这里插入图片描述

Spark下载页面

如上图所示,各个版本的版本包及源代码的github地址可以从Spark项目的下载页面找到。为了访问HDFS(Hadoop分布式文件系统)以及标准或定制的Hadoop输入源,Spark的编译版本要与Hadoop的版本对应。如上图所示,上面下载页面提供了针对Hadoop2.7的预编译版本。除非你想构建针对特定版本hadoop的Spark,否则还是建议你通过下载页面的推荐链接下载预编译的二进制包。在安装Spark之前,还要确保电脑上已经安装好了Java 8+以及anaconda。例如作者选了一台linux服务器,下载了spark-3.2.1预编译包及对应的hadoop3.3的预编译包,Java版本java1.8.0_251,python3.7

  1. 解压并创建软链

下载完上述版本的包后,解压缩并将其移动到你的 /opt 文件夹下:

$ tar -xzf spark-3.2.1-bin-hadoop3.3.tgz
$ mv spark-3.2.1-bin-hadoop3.3 /opt/spark-3.2.1-bin-hadoop3.3

创建软链

$ ln -s /opt/spark-3.2.1-bin-hadoop3.3 /opt/spark̀
  1. 添加环境变量

最后,告诉你的 bash(或 zsh 等)在哪里可以找到 spark。为此,通过在 ~/.bashrc(或 ~/.zshrc)文件中添加以下行来配置 $PATH 变量:

export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH
  1. 安装pysaprk

这边使用清华源,下载快点

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark
  1. 在IDE中使用PySpark

有时你需要一个完整的 IDE 来创建更复杂的代码,而 PySpark 默认不在 sys.path 上,但这并不意味着它不能用作常规库。你可以通过在运行时将 PySpark 添加到 sys.path 来解决此问题。findspark可以做到这点,可以输入如下命令:

$ pip install findspark

然后在你的 IDE(我使用的PyCharm)上初始化 PySpark,只需在代码中输入:

import findspark
findspark.init()

三、Spark编程模型及Spark python编程入门

SparkContext类与SparkConf类

任何Spark程序的编写都是从SparkContext开始的。SparkContext的初始化需要一个SparkConf对象,后者包含了Spark集群配置的各种参数(比如说主节点的URL)。

初始化后,我们便可以用SparkContext对象所包含的各种方法来创建或者操作分布式数据集和共享变量。Spark shell可以自动完成上述初始化:
在这里插入图片描述

若是用python代码来实现的话。可以参考下面的代码:

import findspark
findspark.init()from pyspark import SparkContext, SparkConf
conf = SparkConf() \.setAppName('First Application') \.setMaster("local[4]")
sc = SparkContext(conf=conf)

上述代码会创建一个四线程的SparkContext对象,并将其相应的任务命名为“First Application”。

编写第一个Spark python应用程序:计算pi

如下所示,我们编写了一个计算Pi的应用程序:

import findspark
findspark.init()
import random
from pyspark import SparkContext
sc = SparkContext(appName="EstimatePi")
def inside(p):x, y = random.random(), random.random()return x*x + y*y < 1
NUM_SAMPLES = 1000000
count = sc.parallelize(range(0, NUM_SAMPLES)) \.filter(inside).count()
print("Pi is roughly %f" % (4.0 * count / NUM_SAMPLES))
sc.stop()

在这里插入图片描述

控制台输出 : Pi is roughly 3.142100

总结

本文首先介绍了Spark的基础知识以及RDD和DataFrame这些核心概念,然后演示了如何下载Spark二进制版本并搭建一个本地单机模式下的开发环境,最后通过Python语言来编写第一个Spark程序。


http://chatgpt.dhexx.cn/article/mTCMeT4D.shtml

相关文章

手把手带你玩转Spark机器学习-深度学习在Spark上的应用

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

Spark Machine Learning(SparkML):机器学习(部分一)

机器学习是现阶段实现人工智能应用的主要方法,它广泛应用于机器视觉、语音识别、自然语言处理、数据挖掘等领域。MLlib是Apache Spark的可伸缩机器学习库。官网地址:[http://spark.apache.org/docs/latest/ml-guide.html] Spark的机器学习(ML)库提供了许多分布式ML算法。这些算…

手把手带你玩转Spark机器学习-使用Spark构建聚类模型

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

Spark机器学习解析

源码加数据集&#xff1a; 文件源码 Gitee好像只收10M一下的文件类型&#xff0c;所以数据集就只能以链接的形式自己下了 KMeans和决策树KDD99数据集&#xff0c;推荐使用10%的数据集&#xff1a; http://kdd.ics.uci.edu/databases/kddcup99/ ALS电影推荐的Movielens数据集…

Spark大数据处理系列之Machine Learning

Spark的机器学习库(Spark MLlib)&#xff0c;包括各种机器学习算法&#xff1a;协同过滤算法、聚类算法、分类算法和其他算法。在前面的《Spark大数据处理》系列文章&#xff0c;介绍Apache Spark框架&#xff0c;介绍如何使用Spark SQL库的SQL接口去访问数据&#xff0c;使用S…

大数据笔记--Spark机器学习(第一篇)

目录 一、数据挖掘与机器学习 1、概念 2、人工智能 3、数据挖掘体系 二、机器学习 1、什么是机器学习 2、机器学习的应用 3、实现机器学习算法的工具与技术框架 三、Spark MLlib介绍 1、简介 2、MLlib基本数据类型 Ⅰ、概述 Ⅱ、本地向量 Ⅲ、向量标签的使用 Ⅳ…

iis 重启 (三种方法)

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01; 1 1、界面操作 打开“控制面板”->“管…

IIS中应用程序池自动停止,重启报错

阅文时长| 0.2分钟字数统计| 329.6字符主要内容| 1、引言&背景 2、解决方案 3、声明与参考资料 『IIS中应用程序池自动停止&#xff0c;重启报错』编写人| SCscHero 编写时间| 2022/1/3 PM12:32文章类型| 系列完成度| 已完成座右铭每一个伟大的事业&#xff0c;都有一个微不…

服务器上系统怎么启动iis,IIS服务器如何重新启动

IIS的设计目的是建立一套集成的服务器服务&#xff0c;用以支持HTTP&#xff0c;FTP和SMTP&#xff0c;它能够提供快速且集成了现有产品&#xff0c;同时可扩展的Internet服务器&#xff0c;而最近就有很多小伙伴问小编IIS服务器如何重新启动&#xff0c;其实很简单&#xff0c…

解决:IIS 假死,运行一段时间服务器上所有网站打不开,必须要重启服务器才行,重启IIS都没用。怎么解决,解决方案

tip:我服务器问题是 每个5-6天后&#xff0c;服务器上的所有网站都不能访问&#xff0c;重启IIS无用&#xff0c;必须重启服务器&#xff01; 后&#xff0c;请教周华伟周经理后&#xff0c;找到解决方案如下&#xff1a; 第一原因&#xff1a; 这是程序池造成的&#xff0c…

iis服务器 关闭自动启动,设置IIS服务器定时自动重启的方法

最近&#xff0c;有一朋友的IIS服务器老是出现问题&#xff0c;运行一段时间下来就会出现访问服务器上的网站时提示数据库连接出错&#xff0c;然后重启IIS后网站又能正常访问了&#xff0c;实在找不出是什么原因导致了这个问题。不过最终我想到了一个笨办法&#xff0c;就是让…

C#实现对IIS网站和应用程序池实时监测(网站停止后自动重启)

一、需求分析 在我们的日常运维中,可能会遇到业务网站在运行一段时间后由于某些不确定因素而停止运行,导致业务功能受影响,而此时只要我们重启服务又能够正常运行了,在我们还没有完全排查从根本上解决问题前,需要一个临时的方法来救场(即:当发现业务网站停止后能够自动重…

bat脚本重启IIS中的网站

bat脚本实现重启IIS中的网站 echo off %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d C:\Windows\System32\inetsrv\ tas…

Windows服务器设置IIS定时重启的方法,带图详解

我们在使用Windows2008下IIS服务器时会经常出现资源耗尽的现象&#xff0c;运行一段时间下来就会出现访问服务器上的网站时提示数据库连接出错&#xff0c;重启IIS后网站又能正常访问了&#xff0c;这个问题可能困扰了很多站长朋友。 一位做网站的笔友经过不断的实践找到了一个…

【服务器】iis的重启服务器、重启iis、回收(重启)线程池、刷新网站

windows自带iis&#xff0c;如果没有的也可以控制面板中启用 1、在开始按钮点击右键&#xff0c;选择控制面板。 2、接着我们从控制面板选择“程序”。 3、然后选择“启用或关闭windows功能”。 4、从列表中选择Internet Infomation Services。 5、并且把相应的功能条…

【window】重启IIS服务

在工作站计算机中使用命令窗口重启IIS一、首先打开cmd命令窗口 二、在cmd窗口中输入iisreset /restart——注 /前有空格 然后就能重启IIS

关于IIS重启的几种方法

关于IIS重启的几种方法 今天看文档&#xff0c;正好看到了有各种情况下&#xff0c;对于云端和本地互相同步更新过程中&#xff0c;经常需要重启IIS服务。自己一直就掌握一种重启方法&#xff0c;想看看一共有几种常用的&#xff0c;遂百度之。经过试验&#xff0c;将经验总结如…

Matlab常用图像处理命令108例(八)

文章和代码以及样例图片等相关资源&#xff0c;已经归档至【Github仓库&#xff1a;digital-image-processing-matlab】或者公众号【AIShareLab】回复 数字图像处理 也可获取。 文章目录 98.roifill99.roifilt2100.roipoly101.std2102.subimage103.truesize104.uint8105.uint16…

chrome浏览器跨域设置(版本号108之后的跨域设置)

1、首先在chrome浏览器安装目录下复制chrome.exe&#xff0c;生成一个新的命名为chrome-cross.exe 注意&#xff1a;为什么要在目录下复制一个新的&#xff1f;是因为如果名字相同&#xff0c;可能会导致设置好的跨域浏览器打开后跟原来的chrome.exe是同一个浏览器&#xff0c…

Leetcode——第108题

题目意思&#xff1a;将排序后的数组转换成二叉查找树。 二叉查找树的定义&#xff1a; &#xff08;1&#xff09;若它的左子树不空&#xff0c;则其左子树上任意结点的关键字的值都小于根节点关键字的值。 &#xff08;2&#xff09;若它的右子树不空&#xff0c;则其右子…