Spark实操学习

news2024/9/21 12:36:33

Spark学习

  • 一、Spark-Shell编程
    • 1. 配置python3(三台服务器都要配置)
    • 2. 开始Spark编程
    • 3. spark-shell工具
  • 二、Java项目测试
    • 1. 新建项目
    • 2. Spark-java代码测试
  • 三、Scala项目测试
    • 1. 安装scala
    • 2. 安装包管理器sbt
    • 3. 在编译工具中安装scala工具
    • 4. 新建项目
    • 5. spark-scala代码测试
  • 四、Python项目测试
    • 1.新建项目
    • 2. Spark-python代码测试
  • 五、代码打包提交
    • 1. Scala代码打包提交
    • 2. Java代码打包提交
    • 3. Python代码打包提交
  • 六、提交Spark集群并运行
    • 1. Scala代码提交到Spark集群运行
    • 2. Java代码提交到Spark集群运行
    • 3. Python代码提交到Spark集群运行
    • 4. 后续学习
  • 参考资料

前面已经完成了 Spark集群搭建,接下来开始对spark进行一个简单的学习,主要参考b站相关视频;因为Spark支持Python、Scala、Java这三种语言,所有下面主要以针对这些进行操作

一、Spark-Shell编程

1. 配置python3(三台服务器都要配置)

先安装工具依赖

yum install -y git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel

克隆python管理工具pyenv

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

配置环境变量

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

然后source一下

source ~/.bashrc

安装python指定版本

pyenv install 3.7.7

安装可能会比较慢,这边推荐一个快一点的方法

  1. 先在浏览器把python-3.7.7的包下载下来
    https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz
  2. 然后把压缩包上传到 /root/.pyenv/cache/
    因为pyenv install 3.7.7会先查看cache中是否存在,有就直接安装,不用再去拉取
  3. 再次安装就行
    pyenv install 3.7.7
    4.选择python3.7.7
    pyenv global 3.7.7

2. 开始Spark编程

先上传一个word.txt文件到服务器
在这里插入图片描述
启动pyspark

pyspark

在这里插入图片描述
读取文件,进行操作

# 读取文件
textFile = spark.read.text("file:///root/spark-shell-test/word.txt")
# 计数
textFile.count()
# 获取第一行
textFile.first()

在这里插入图片描述
现在,让我们将此DataFrame转换为新的DataFrame。我们调用filter返回一个新的DataFrame,其中包含文件中行的子集

linesWithSpark = textFile.filter(textFile.value.contains("时代"))

我们可以将转换和行动联系在一起:

textFile.filter(textFile.value.contains("时代")).count()

在这里插入图片描述
后续其他操作可观看spark官方文档测试

3. spark-shell工具

spark-shell是运用Scala语言,可通过spark-shell命令直接启动

spark-shell

在这里插入图片描述
读取文件,执行操作

var textFile = spark.read.text("file:///root/spark-shell-test/word.txt")
# 计数
textFile.count()
# 获取第一行
textFile.first()

在这里插入图片描述
spark-shell的简单测试就到此结束了,想了解更详细内容可前往spark官方文档查看


在生产中用spark-shell不太方便,spark-shell主要用于测试,生产中主要用ide等相关工具,所以接下来介绍生产下的使用
java:1.8,11
scala:2.12.19
python:3.10
以上这些需要安装在本机电脑上,具体安装流程就不做介绍,自行安装即可

二、Java项目测试

1. 新建项目

新建项目 -> 选择Maven -> 创建maven-archetype-quickstart骨架
在这里插入图片描述
项目结构如下
在这里插入图片描述

2. Spark-java代码测试

添加spark依赖到pom.xml

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.12</artifactId>
  <version>3.5.1</version>
</dependency>

新建sparkBasicExample.java文件

import java.util.Arrays;
import java.util.List;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

public class sparkBasicExample {
    public static void main(String[] args) {
        // 创建SparkConf配置对象
        SparkConf conf = new SparkConf().setAppName("SparkBasicExample").setMaster("local[*]");
        // 创建JavaSparkContext
        JavaSparkContext sc = new JavaSparkContext(conf);
        //创建一个简单的JavaRDD
        JavaRDD<Integer> rdd = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
        //应用map转换操作
        JavaRDD<Integer> squares = rdd.map(num -> num * num);
        //应用filter转换操作
        JavaRDD<Integer> evenSquares = squares.filter(num -> num % 2 == 0);
        //执行行动操作collect,收集结果到驱动程序
        List<Integer> evenSquaresCollected = evenSquares.collect();
        //打印结果
        evenSquaresCollected.forEach(System.out::println);
        //关闭SparkSession
        sc.stop();
    }
}

启动程序后结果如下:
在这里插入图片描述

三、Scala项目测试

由于我没有安装scala,所以这里做一下记录,scala配置的jdk-11,1.8也可以用,但是没有代码提示

1. 安装scala

下载链接:https://www.scala-lang.org/download/2.12.19.html
在这里插入图片描述
安装成功后在cmd中测试一下

scala -version

在这里插入图片描述

2. 安装包管理器sbt

sbt是scala的包管理器,安装stb-1.10.1.msi
下载链接:https://github.com/sbt/sbt/releases/download/v1.10.1/sbt-1.10.1.msi
官网链接:https://www.scala-sbt.org/download
在这里插入图片描述

安装成功后在cmd中测试一下

sbt

在这里插入图片描述

3. 在编译工具中安装scala工具

这里我用的idea,也可以用vscode,可根据个人喜好来选择
在plugins下搜索scala安装
在这里插入图片描述
成功后重启idea

4. 新建项目

新建项目 -> 选择Scala -> 选择sbt -> next
在这里插入图片描述
选择对应的版本,然后finish,第一次会比较慢
在这里插入图片描述

这里我等了很久,没反应,就换了种方式
1.打开cmd,进入得到项目文件夹
2.输入sbt new(等个5分钟左右)
在这里插入图片描述
3.选择 模板 e 回车(等个5分钟左右)
4.输入项目名(spark-scala)
5.然后再用idea打开项目
在这里插入图片描述

5. spark-scala代码测试

修改build.sbt依赖文件(这里加载依赖要很久,慢慢等)

import Dependencies._

ThisBuild / scalaVersion     := "2.12.19"
ThisBuild / version          := "0.1.0-SNAPSHOT"
ThisBuild / organization     := "com.example"
ThisBuild / organizationName := "example"

lazy val root = (project in file("."))
  .settings(
    name := "spark-scala",
    libraryDependencies ++= Seq(
      munit % Test,
      "org.apache.spark" %% "spark-core" % "3.5.1"
    )
  )

可以先在Hello文件run一下
在这里插入图片描述
新建文件SparkBasicExample

package example

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

object SparkBasicExample {
  def main(args: Array[String]): Unit = {
    //创建SparkSession
    val conf = new SparkConf().setAppName("HelloWorld").setMaster("local[2]")
    val sc = new SparkContext(conf)
    // 创建一个简单的RDD
    val rdd = sc.parallelize(1 to 10)
    //应用map转换操作
    val squares = rdd.map(num => num * num)
    // 应用filter转换操作
    val evenSquares = squares.filter(num => num % 2 == 0)
    //执行行动操作collect,收集结果到驱动程序
    val evenSquaresCollected = evenSquares.collect() 
    //打印结果
    evenSquaresCollected.foreach(println)
    sc.stop()
  }
}

在这里插入图片描述

四、Python项目测试

python编译工具我用的是pycharm

1.新建项目

创建项目,然后安装pyspark库
在这里插入图片描述

 pip install pyspark -i https://pypi.tuna.tsinghua.edu.cn/simple

2. Spark-python代码测试

创建文件spark-python.py

from pyspark import SparkConf, SparkContext

def main():
	# 创建SparkConf配置对象
	conf = SparkConf().setAppName("App").setMaster("local[*]")
	# 创建sparkContext
	sc = SparkContext(conf=conf)
	#创建一个简单的RDD
	rdd = sc.parallelize(range(1,11))
	#应用map转换操作
	squares = rdd.map(lambda num:num * num)
	#应用filter转换操作
	even_squares =squares.filter(lambda num: num % 2 ==0)
	#执行行动操作collect,收集结果到驱动程序
	even_squares_collected=even_squares.collect()
	#打印结果
	for num in even_squares_collected:
		print(num)
	# 定制SparkContext
	sc.stop()

if __name__ == "__main__":
	main()

python不支持本地运行,写好后上传到集群中执行
spark提交python脚本命令

spark-submit \
	--master local[8]
	--deploy-mode cluster \
	/path/to/your-script.py

参数说明:

  • –master:指定Spark集群的主节点和资源数
  • –deploy-mode:指定作业部署模式,对于Python应用程序,通常使用 cluster 模式
  • /path/to/your-script.py:Python脚本文件的路径。

五、代码打包提交

这块是服务器本地测试,无需启动集群,后面一个板块则是需要启动集群测试

1. Scala代码打包提交

在terminal输入打包命令(项目中最好只保留测试文件)

sbt package

在这里插入图片描述

打包完成后找到jar包
在这里插入图片描述

上传到服务器
在这里插入图片描述

提交spark作业

spark-submit --class example.SparkBasicExample --master local[2] spark-scala_2.12-0.1.0-SNAPSHOT.jar

运行结果
在这里插入图片描述

2. Java代码打包提交

还是先打包程序(项目中最好只保留测试文件),然后上传服务器
在这里插入图片描述
在这里插入图片描述
提交spark作业

# org.chen 是pom文件中<groupId>org.chen</groupId>
spark-submit --class org.chen.SparkBasicExample --master local[2] spark-java-1.0-SNAPSHOT.jar

在这里插入图片描述

3. Python代码打包提交

python的方式比较简单,无需打包,直接拖到hadoop103节点(装了python3的环境)
在这里插入图片描述
提交spark作业

# org.chen 是pom文件中<groupId>org.chen</groupId>
spark-submit --master local[2] spark-python.py

在这里插入图片描述
也是可以执行成功的

六、提交Spark集群并运行

先启动spark集群

cd /opt/module/spark-3.4.3/
./sbin/start-all.sh

在这里插入图片描述

1. Scala代码提交到Spark集群运行

在之前的代码中去掉setMaster,然后重新打包

sbt clean	# 先清理一下
sbt package		# 打包

在这里插入图片描述
打包号后上传集群,提交到spark
在这里插入图片描述

spark-submit --class example.SparkBasicExample --master spark://hadoop103:7077 spark-scala_2.12-0.1.0-SNAPSHOT.jar

完成后可以在spark的web页面看到刚刚提交的作业
在这里插入图片描述

2. Java代码提交到Spark集群运行

和前面一样,在代码中去掉setMaster,然后重新打包,上传
在这里插入图片描述
执行spark提交命令

spark-submit --class org.chen.SparkBasicExample --master spark://hadoop103:7077 spark-java-1.0-SNAPSHOT.jar

在这里插入图片描述
在这里插入图片描述

3. Python代码提交到Spark集群运行

python同样去掉setMaster,上传
在这里插入图片描述
执行spark提交命令

spark-submit --master spark://hadoop103:7077 spark-python.py

在这里插入图片描述

4. 后续学习

可以在spark-shell中学习(无需启动集群),里面内置spark和sc对象
在这里插入图片描述
spark数据加载方式有hdfs(hadoop)、本地文件、数据库(mysql)

# 加载hdfs
# val rdd = sc.textFile("/tmp/word.txt")
# 加载本地文件/root/spark-shell-test/word.txt
val rdd = sc.textFile("file:///root/spark-shell-test/word.txt")
# 输出文件内容
rdd.foreach(println)
# 储存文件
rdd.saveAsTextFile("file:///root/word.txt")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
后续可在spark官网或者其他学习视频了解更详细的知识。

参考资料

  • (1小时速通)Spark实战入门,三种语言任选
  • spark官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2139697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.MySQL在Centos 7环境安装

目录 MYSQL在Centos7环境安装MySQL环境配置清理环境检查安装包获取官方yum源安装mysql服务配置my.cnf设置开机启动 MYSQL在Centos7环境安装 MySQL环境配置 安装的时候&#xff0c;用户切换成root。初期练习&#xff0c;mysql不进行用户管理&#xff0c;全部使用root进行&#…

【数据结构】排序算法系列——堆排序(附源码+图解)

堆排序 堆排序基于一种常见的**[[二叉树]]结构**&#xff1a;堆 我们前面讲到选择排序&#xff0c;它在待排序的n个记录中选择一个最小的记录需要比较n一1次。本来这也可以理解&#xff0c;查找第一个数据需要比较这么多次是正常的&#xff0c;否则无法知道它是最小的记录。 …

THREE.js:网页上的3D世界构建者

THREE.js&#xff1a;网页上的3D世界构建者 前言 THREE.js 是一个强大的基于 JavaScript 的库&#xff0c;它使得在网页上创建和展示三维图形变得异常简单。 通过封装复杂的 WebGL 技术&#xff0c;THREE.js 提供了一套丰富的 API&#xff0c;让开发者能够轻松地构建出令人印…

Pytorch详解-Pytorch核心模块

Pytorch核心模块 一、Pytorch模块结构_pycache__Cincludelibautogradnnoptimutils 二、Lib\site-packages\torchvisiondatasetsmodelsopstransforms 三、核心数据结构——Tensor&#xff08;张量&#xff09;在深度学习中&#xff0c;时间序列数据为什么是三维张量&#xff1f;…

利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;它基于标准 Python 类型提示。FastAPI 支持异步编程&#xff0c;使得开发高性能的 Web 应用变得简单快捷。在本文中&#xff0c;我们将探讨如何使用 FastAPI 结合 Jinj…

单线程与2个线程的简易理解

前言 有个需要10个步骤完成的任务&#xff0c;假设每个步骤需要1秒 单线程耗费10秒完成任务 2根线程可能耗费6秒&#xff0c;也可能更少 单线程程序 单线程下&#xff0c;步骤按照次序顺序执行&#xff0c;共计耗费10秒 2个线程的程序 有步骤可以在同一时刻同时运行&…

Python酷库之旅-第三方库Pandas(117)

目录 一、用法精讲 516、pandas.DataFrame.add_suffix方法 516-1、语法 516-2、参数 516-3、功能 516-4、返回值 516-5、说明 516-6、用法 516-6-1、数据准备 516-6-2、代码示例 516-6-3、结果输出 517、pandas.DataFrame.align方法 517-1、语法 517-2、参数 51…

Linux操作系统如何添加新字体

在一个Linux操作系统及办公软件刚安装后&#xff0c;会发现缺少常用的“楷体_GB2312”和“仿宋_GB2312”字体。此时&#xff0c;只需要从其它电脑复制到或者从互联网上下载到这两个字体文件&#xff0c;然后导入到自己的电脑即可&#xff0c;再次打开办公软件就会看到这个字体已…

Playwright 与 Selenium对比

通过这篇关于 Playwright 与 Selenium 的文章&#xff0c;我们将更容易理解 Playwright 和 Selenium 之间的关键区别&#xff0c;并找出哪个工具可能更适合您的需求。 在自动化测试工具方面&#xff0c;Playwright 和 Selenium 都是软件测试人员使用的强大的 Web 自动化工具。它…

PointNet++改进策略 :模块改进 | EdgeConv | DGCNN, 动态图卷积在3d任务上应用

目录 介绍核心思想及其实现核心思想实现步骤 如何改进PointNet**局部几何结构的处理****动态图的引入****特征聚合的灵活性****全局和局部特征的结合** 论文题目&#xff1a;Dynamic Graph CNN for Learning on Point Clouds发布期刊&#xff1a;TOG作者单位&#xff1a;麻省理…

基于JDK1.8和Maven的GeoTools 28.X源码自主构建实践

目录 前言 一、GeoTools与Jdk的版本关系 1、GeoTools与Jdk版本 2、编译环境简介 二、使用Maven编译GeoTools28.X 1、GeoTools28.x 2、Maven的完整编译 3、构建时的问题 三、总结 前言 想要学习和掌握一个开源软件或者项目&#xff0c;源码是我们主要学习的内容。学习开…

NeurIPS 2023 | 基于 Llama 的单变量时序预测基础模型

概率时间序列预测是在广泛应用中出现的一个重要实际问题&#xff0c;包括金融、天气预报、脑成像和计算机系统性能管理等领域。针对这一任务&#xff0c;已经提出了各种方法&#xff0c;从传统的自回归模型到最近基于深度学习架构的神经预测方法。这些以前的方法大多集中在用来…

八、动态规划-算法总结

文章目录 八、动态规划8.1 背景8.1.1 DFS8.1.2 DFS的优化8.1.3 从DFS到动态规划 8.2 使用场景8.3 四点要素 常见四种类型8.4 矩阵类型8.4.1 最小路径和8.4.2 不同路径8.4.3 不同路径 II 8.5 序列类型8.5.1 爬楼梯8.5.2 最长递增子序列8.5.3 单词拆分小结 8.6 双序列类型8.6.1 最…

匹配行最大值替换为最小值公式

好的!我们一步一步详细讲解这个公式的作用和如何实现你想要的功能。 ### 数据结构假设: - 你的数据在 A、B、C 列中,每一行都有值。 - 需要在 A 列和 B 列相同的行中,找到 C 列中的最大值,将其替换为最小值,其他值保持不变。 ### 公式: ```excel =IF(C2=MAX(IF(($A$2:$…

借老系统重构我准备写个OpenAPI3.1版的API管理工具(附录屏演示)

前段时间一直在忙公司老系统重构的方案设计&#xff0c;其中最大的重构点就是前后端分离。为了加快前后端协同开发和对接的工作效率&#xff0c;我决定写一个公司内部使用的OpenAPI3.1版的API管理工具。 文章目录 有现成的工具为啥不用现有成熟方案初步成果展示录屏演示下一步计…

调制是什么,为什么

一、什么是调制、解调&#xff1f; 调制&#xff1a;将信息承载到满足信道要求的高频信号上的过程就是调制。 解调&#xff1a;解调是调制的逆过程&#xff0c;将有用的信息从高频信号中恢复出来的过程就是解调。 二、为什么需要调制&#xff1f; 通信是为了实现“信息”的传…

[240916] X-CMD 发布 v0.4.11:新增 mac 模块,集成 MacOS 实用功能 | 新增 OpenAI o1 系列模型的支持

目录 X-CMD 发布 v0.4.11&#x1f4c3;Changelog✨ mac - 集成 MacOS 实用功能✨ openai✨ gh✨ jina✅ 升级指南 X-CMD 发布 v0.4.11 &#x1f4c3;Changelog ✨ mac - 集成 MacOS 实用功能 新增 mac 模块&#xff0c;用于集成 MacOS 用户需要的各种实用功能&#xff0c;以…

LabVIEW机械手视觉引导系统

开发了LabVIEW软件和硬件工具开发的高精度机械手视觉引导系统。系统通过高效的视觉识别和精确的机械操作&#xff0c;提升工业自动化领域的生产效率和操作精度。 项目背景&#xff1a; 随着工业自动化的不断发展&#xff0c;对生产效率和精确度的要求也日益增高。传统的机械手…

应用层协议HTTP介绍

一、HTTP协议介绍 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一个至关重要的协议。它定义了客户端&#xff08;如浏览器&#xff09;与服务器之间如何通信&#xff0c;以交换或传输超文本。 超文本&#xff1a;视频&#xff0c;音…

【多系统萎缩患者必看】科学锻炼秘籍,让生命之树常青

亲爱的小红书朋友们&#xff0c;&#x1f44b; 今天我们要聊一个温暖而坚韧的话题——关于多系统萎缩&#xff08;MSA&#xff09;患者的锻炼指南。在这个充满挑战的旅程中&#xff0c;锻炼不仅是身体的锻炼&#xff0c;更是心灵的滋养&#xff0c;是对抗病魔的勇敢姿态&#x…