三、Spark-shell执行计算

本章节通过spark-shell进入我们的单机spark的终端进行一些简单的运算。 
本节内容如下

  • 新建RDD 进行乘法操作
  • 新建RDD 进行过滤操作
  • 编写wordCount小例子
  • union的使用
  • groupByKey
  • join
  • reduce
  • lookup

首先安装和启动spark,此部分请参照

mac 单机版 spark 安装

启动后进入spark 的bin 目录运行spark-shell 进入终端。

./spark-shell
  • 1

进入终端后输入sc,查看一下Spark-shell 帮我们自动生成的 SparkContext 的 实例。 
结果如下图

这里写图片描述


1.新建RDD进行乘法操作

1.1 我们生成一个最简单的 List集合RDD:

//注意List大写
val rdd=sc.parallelize(List(1,2,3,4,5,6,7,8,9))
  • 1
  • 2

这里写图片描述

1.2 对集合的每个元素都乘以3

//rdd每个数都乘以3
val mappedRDD=rdd.map(3*_)
  • 1
  • 2

这里写图片描述

1.3 通过collect 查看结果

//计算结果
mappedRDD.collect
  • 1
  • 2

这里写图片描述


2.新建RDD 进行过滤操作

2.1 查看mappedRDD

mappedRDD
  • 1

这里写图片描述

2.2 使用filter 过滤大于10 的

mappedRDD.filter(_>10)
  • 1

这里写图片描述

2.3 查看结果

这里写图片描述


2.4 函数式编程,符合scala风格写法,也符合Spark的应用风格写法。在spark编程中,大多数功能实现之用一行代码即可实现 
过滤操作如下:

val filteredRDDAgain=sc.parallelize(List(1,2,3,4,5,6,7,8,9)).map(3*_).filter(_>10).collect
  • 1

这里写图片描述


3.编写wordCount小例子

3.1 新建一个用于读取的文件(我的文件名叫做readme.md),内容是我粘贴的英文句子如下:

这里写图片描述

3.2 新建RDD读取文件

// "/Users/yangyibo/data/readme.md"是文件路径

val rdd =sc.textFile("/Users/yangyibo/data/readme.md")
  • 1
  • 2
  • 3

这里写图片描述

3.3 统计readme.md 文件的行数

rdd.count
  • 1

这里写图片描述

3.4 统计单词的个数

val wordcount=rdd.flatMap(_.split(' ')).map((_,1)).reduceByKey(_+_)
  • 1

这里写图片描述

3.5 查看结果

wordcount.collect
  • 1

这里写图片描述

3.6 存储统计结果

//存储结果的路径/Users/yangyibo/data/result

wordcount.saveAsTextFile("/Users/yangyibo/data/result")
  • 1

这里写图片描述

返回结果如下

这里写图片描述

3.7 对分析结果进行排序输出

//”/Users/yangyibo/data/resulted”排序输出的输出文件路径

val wordcount=rdd.flatMap(_.split(' ')).map((_,1)).reduceByKey(_+_).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1)).saveAsTextFile("/Users/yangyibo/data/resulted")
  • 1

这里写图片描述

文件结果如下,按出现次数倒序排序

这里写图片描述


4.union 的使用(去重)

4.1 生成两个rdd ,进行union 匹配

val rdd1=sc.parallelize(List(('a',1),('b',1)))
val rdd2=sc.parallelize(List(('c',1),('d',1)))
  • 1
  • 2

这里写图片描述

4.2 查看结果

(rdd1 union rdd2).collect
  • 1

这里写图片描述


5.groupByKey

5.1 新建RDD

val wordcount=rdd.flatMap(_.split(' ')).map((_,1)).groupByKey
  • 1

5.2 查看结果

wordcount.collect
  • 1

这里写图片描述


6.join

join操作就是一个笛卡尔积操作的过程 
  • 1
  • 2

6.1产生两个RDD

val rdd1=sc.parallelize(List(('a',1),('a',2),('b',3),('b',4)))
val rdd2=sc.parallelize(List(('a',5),('a',6),('b',7),('b',8)))
  • 1
  • 2

这里写图片描述

6.2 对rdd1和rdd2进行join 

(rdd1 join rdd2).collect
  • 1

这里写图片描述


7.reduce

reduce本身在 RDD 操作中属于一个 action 类型的操作,会导致 Job 的提交和执行 
  • 1
  • 2

7.1生产一个RDD

val rdd = sc.parallelize(List(1,2,3,4,5,6))
  • 1

这里写图片描述

7.2 对list求和

rdd.reduce(_+_) 
  • 1

这里写图片描述


8.lookup (查找)

8.1 新建一个RDD

val rdd2=sc.parallelize(List(('a',5),('a',6),('a',7),('b',8),('b',9)))
  • 1

这里写图片描述

8.2 查找key 是’a’ 的值

rdd2.lookup('a')
  • 1

这里写图片描述


本节介绍结束,接下来就是idea 编写代码实战了。 
idea 构建maven 管理的spark项目

猜你喜欢

转载自blog.csdn.net/u010285974/article/details/81840413