开发者学堂课程【大数据 Spark2020最新课程(知识精讲与实战演练)第一阶段:Spark 入门_Spark Shell 本地文件读取】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/688/detail/11945
Spark 入门_Spark Shell 本地文件读取
引入:
Spark 代码编写有两种方式即:
比较适合用于数据探索和测试的 1.spark-shell 和比较适合用于上线应用和固化代码的独立应用。
本节主要讲解 1.spark-shell。
以 wordcount 为案例进行讲解,第一步使用 spark-shell 读取文件,计算本地文件中单词出现的频率即词频统计。
主要介绍:
一、准备文件
二、启动 spark shell
三、执行代码如下
一、准备文件
首先寻找数据,指定 export 下的 datas 目录,然后创建文件即
vi word count.txt 保存并退出,该数据文件已准备好。
二、启动 spark shell
Spark shell 是一个交互式的命令行窗口,原理为把每一行 scala 代码编译成类,最终交由 spark 执行,是 shell 的黑窗口,在该窗口内可以编写代码,回车代码执行结果可见。
spark-shell 命令在启动时 spark-shell --master 指定 master 的地址,以下表格几种均可就可以提交 spark 任务。采用 local 地址的形式进行测试如图
Master 地址的设置有如下几种方式:
地址 |
解释 |
local[N] |
使用 N条 worker 线程在本地运行 |
Spark://host:port |
在 spark standalone 中运行,指定 spark 集群的 master 地址,端口默认为7077 |
mesos://host:port |
在 Apache Mesos 中运行,指定 Mesos 的地址 |
varn |
在 Yarn 中运行,Yarn 的地址由环境变量 HADOOP_CONF_DIR 来指定 |
三、执行代码如下
具体步骤如下:
Step1 准备文件
在 node01 中创建文件 /export/data/wordcount.txt
hadoop spark flume
spark hadoop
Flume
Step2 启动 Spark shell
cd/export/servers/spark
bin/spark-shell --master local [2]
注意四步骤:
1.读取文件;
在 spark 中要读取文件需要使用代码 sc.textFile(“”) 的形式传入文件路径,此处举例为本地文件,从根目录开始即:
(file:///export/data/wordcount.txt) 读取会返回对象,需要返回到前面编写的位置给出对象的名字 rdd1,运行无误。
2.拆分单词;
通过 rdd1 拆分 rdd 中的单词使用 map(), 当中接受的参数是每一行的数据,暂定为 item =>(“ ”),按照空格来拆分,拆分完再次命名 rdd2 ,生成的是 rdd2 的 array ,array 不便执行,为将其修改为平铺的 rdd ,再次执行 rdd2, 进行覆盖需追加为 val rdd2=rdd1.flatmap(item =>item.split(“ ”)) ,执行后变为 RDD[string]。
3.给予每个单词词频为1;
编写 val rdd3=rdd2.map(item=>item,1) 将单词转换为词频为1的形式,返回的结果是一个元组,第一项为 k ,第二项为其词频。
4.按照单词进行词频聚合(如图)
按照具体每个单词统计结果,即 val rdd4=rdd3.reduceByKey(),按照具体单词进行规约,存在两个参数,当前值 curr ,当前结果即集合值 agg ,只需将 curr +agg 作为整个函数的返回结果即可。此时 rdd4 已表示完毕,直接 rdd4.collect() 收集 rdd 当中的所有数据,并且返回 scala 的数据集合,
检查数据集合中的内容:
(hadoop,1)、(spark,2)、(hadoop,2)由于数据文件缺少 H、(flume,2) 这是第一种方式运行代码即使用 spark shell 读取本地文件。