开发者学堂课程【大数据 Spark2020最新课程(知识精讲与实战演练)第一阶段:Spark 入门_读取 HDFS 上的文件】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/688/detail/11947
Spark 入门_读取 HDFS 上的文件
课题引入:
Spark 是大型搜索引擎,需要处理大规模数据文件,若仅是单机无法存储,因此需要存储到 HDFS ,本节重点介绍如何读取 HDFS 上的文件。
内容介绍:
一、上传文件到 HDFS 中
二、在 spark shell 中访问 HDFS
一、上传文件到 HDFS 中
cd/export/data
Hdfs dfs -mkdir/dataset
Hdfs dfs -put wordcount.txt/dataset/
二、在 spark shell 中访问 HDFS Valsourcerdd=sc.textfile (“hdfs://node01:8020/dataset/wordcount.
txt”)
Valflattencount
rdd=sourcerdd.flatmap(_.split(“”)).map((_,1))
Val aggcount rdd=flattencount rdd.reduceByKey(_ + _)
Val result=aggcount rdd.collect
执行如下:
[root@node 01 data]#ls
wordcount. txt
[root@node 01 data]#cd/export/data
[root@node 01 data]#ls
wordcount. txt
[root@node 01 data]#vi wordcount, txt
得到:
hadoop spark flume
spark hadoop
flume hadoop
保存并且退出,继续执行如下:
[root@node 01 data]#ls
wordcount. txt
[root@node 01 data]#cd/export/data
[root@node 01 data]#ls
wordcount. txt
[root@node 01 data]#vi wordcount, txt
[root@node 01 data]#hdfs dfs -mkdir/data
[root@node 01 data]#hdfs dfs -put wordcount.txt/data
[root@node 01 data]#
通过 UI 查看 HDFS中是否存在此文件。(如图)
将本地文件删除,注意 data 目录下没有文件,退出到 servers spark 目录中,执行 bin/spark-shell --master local[6], 启动shell 窗口,等待结果。
读取所用的 sc 对象是 spark context available as ‘sc’ ,即 spark 试样启动时自动创建 spark context 对象被叫做 “sc” 。则可以 Val rdd1 =sc.textFile(“hdfs://wordcount
.txt”) ,rdd1.collect() 收集数据。
(如图)另一种读取方式即:Vale
Rdd1=sc.textFile(“/data/workcount.txt”) 默认读取的 HDFS 的文件。
编写案例 val rdd2=rdd1.flatmap(item=>item.split(“”)) ,转换为三条数据,一对多的转换,第一个元素去往 item .split ,成为数组,存放 hadoop,spark,flume,被 flatmap 展平成三个元素,此为 flatmap 的执行流程。然后进行 rdd2.map(item=>(item,1)) 做转换,命名为 rdd3。
val rdd4 的创建, val rdd4=rdd3.reduce
ByKey((curr,agg)=>curr+agg), 得到 rdd4 在 rrd4 的基础上进行数据收集即: rdd4.collect()。
代码完成,若代码 rrd4 代码不进行,结果没有进行计算,只有在调用 collect 命令才会进行计算结果,此为惰性求值,即之前不进行求值,最后进行计算求值。