Spark入门之REPL/CLI/spark shell 快速学习

2023-11-21 10:30

本文主要是介绍Spark入门之REPL/CLI/spark shell 快速学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

*注:本文为本人结合网上资料翻译  Apache Spark 2.x for Java developers  一书而来,仅作个人学习研究之用,支持转载,但务必注明出处。

一、前言
本章的目的是提供指导,以便读者熟悉独立模式下安装Apache Spark的过程及其依赖关系。 然后,我们将开始与Apache Spark的第一次交互,通过使用Spark CLI(称为REPL)进行一些练习。
我们将继续讨论Spark组件以及与Spark相关的常用术语,然后讨论集群环境中Spark工作的生命周期。 我们还将从图形意义上探索Spark作业的执行,从创建DAG到执行Spark Web UI中提供的实用程序的最小任务单元。
最后,我们将通过使用Spark-Submit工具和Rest API讨论Spark Job配置和提交的不同方法来结束本章。

快速安装单机模式spark:
1.下载scala http://www.scala-lang.org/download/
2.安装scala:rpm -ivh scala-2.12.4.rpm
3.设置scala环境变量:vim /etc/profile
export SCALA_HOME=/usr/share/scalaexport PATH=$SCALA_HOME/bin:$PATH
4.下载spark: http://spark.apache.org/downloads.html
5.解压spark:tar -xvf /opt/spark-2.2.1-bin-hadoop2.7.tgz
6.配置spark环境变量:vim /etc/profile
export SPARK_HOME=/opt/spark/export PATH=$PATH:$SPARK_HOME/bin
大功告成!
通过下述命令启动spark单机模式:
$SPARK_HOME/bin/spark-shell
如果Spark二进制文件已经被加入到环境变量PATH中,我们可以简单地执行spark-shell命令即可。
可以在http://localhost:4040中获取spark驱动器用户界面。稍后会细讲

二、开始Spark REPL
Spark REPL或Spark shell(也称为Spark CLI)是探索Spark编程的非常有用的工具。 REPL是Read-Evaluate-Print Loop(读取-求值-打印 循环)的首字母缩写。 它是程序员用来与框架进行交互的交互式shell。 Apache Spark也带有REPL,初学者可以使用它来理解Spark编程模型。

2.1使用Spark shell进行一些基本练习
请注意,Spark shell仅在Scala语言中可用。 但是,我们已经让Java开发人员很容易理解这些例子。
2.1.1确认Spark版本
使用spark shell,通过下面的命令来确认spark脚本:
2.1.2创建和过滤RDD
让我们从创建一个string组成的RDD开始:
现在,我们来过滤这个RDD,使得其只留下以“j”开头的字符串
filter将一个rdd转化为另一个rdd,因此filter是transformation操作。
现在,我们对filteredrdd执行一个action操作来看看它的元素。让我们对filteredrdd执行collect操作:
collect操作返回了一个string类型的数组。因此,它是一个action操作。
2.1.3RDD中的word count
让我们对前面的stringRdd运行word count问题。word count就是大数据领域的HelloWorld。word count意味着我们将计算RDD中每个元素出现的次数。
我们如下来创建pairRDD变量:
(map(): map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。
pairRDD由单词和1(整型)构成的pair组成,其中单词代表的就是stringRDD中的字符串。
现在,我们对这个RDD执行reduceByKey操作来计算每个单词出现的次数。
(*注: reduceByKey就是对元素为KV对的RDD中Key相同的元素的Value进行binary_function的reduce操作,因此,Key相同的多个元素的值被reduce为一个值,然后与原RDD中的Key组成一个新的KV对。
现在,我们对其进行collect操作来看看结果:
2.1.4查找整数RDD中所有偶数的和
让我们创建一个整数RDD:
我们对这个RDD执行filter操作过滤出所有的偶数:
现在,我们把evenNumbersRDD中的所有元素加起来

2.1.5 计算文件中的单词数量
我们来读取位于$SPARK_HOME/examples/src/main/resources中的people.txt文件:
在REPL中,用textfile()读取文件:
下一步是扁平化文件的内容,也就是说,我们将通过分割每一行来创建一个RDD,并将列表中的所有单词拼合起来,如下所示:
(flatMap可以理解为先map后flat(扁平化),如此例中可将元素用逗号分隔成两个。而map一个元素只能映射到一个元素。)
flattenFile RDD的内容如下:

现在,我们可以计算这个RDD的所有单词数量。

无论何时调用诸如count的action,Spark都会创建一个有向无环图(DAG)来描述每个RDD的沿袭依赖关系。 Spark提供了调试方法toDebugString()来显示RDD的这种沿袭依赖关系:



参考文献:
Apache Spark 2.x for Java developers
S Gulati,S Kumar - 2017 - 被引量: 0
Gulati, Sourav; Kumar, Sumit

这篇关于Spark入门之REPL/CLI/spark shell 快速学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401764

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删