-
Spark的Java和Scala API的使用
实验环境
Linux Ubuntu 16.04
前提条件:- Java 运行环境部署完成
- Spark Local模式部署完成
上述前提条件,我们已经为你准备就绪了。
实验内容
在上述前提条件下,完成Spark中Scala和Java API的使用
-
实验步骤
1.点击"命令行终端",打开新窗口
-
2.启动Scala的Shell
在命令行终端中输入下面的命令即可启动Scala Shell
启动后终端显示如下:
如上出现了 Scala>表明进入了Scala的Shell
-
3.弹性分布式数据集RDD
RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。
-
4.RDD的创建方法
1) 由一个已经存在的Scala集合创建。
2) 由外部存储系统的数据集创建,包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等
-
RDD编程Scala API
5.Transformation转换
RDD中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时,这些转换才会真正运行。这种设计让Spark更加有效率地运行。
常用的Transformation
map(func)
返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成filter(func)
返回一个新的RDD,该RDD由经过func函数计算后返回值为true的输入元素组成flatMap(func)
类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素)union(otherDataset)
对源RDD和参数RDD求并集后返回一个新的RDDintersection(otherDataset)
对源RDD和参数RDD求交集后返回一个新的RDDgroupByKey([numTasks])
在一个(K,V)的RDD上调用,返回一个(K, Iterator[V])的RDDreduceByKey(func, [numTasks])
在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,与groupByKey类似,reduce任务的个数可以通过第二个可选的参数来设置sortByKey([ascending], [numTasks])
在一个(K,V)的RDD上调用,K必须实现Ordered接口,返回一个按照key进行排序的(K,V)的RDDjoin(otherDataset, [numTasks])
在类型为(K,V)和(K,W)的RDD上调用,返回一个相同key对应的所有元素对在一起的(K,(V,W))的RDD -
6.Action动作
常用的Action
reduce(func)
通过func函数聚集RDD中的所有元素,这个功能必须是课交换且可并联的collect()
在驱动程序中,以数组的形式返回数据集的所有元素count()
返回RDD的元素个数first()
返回RDD的第一个元素(类似于take(1))take(n)
返回一个由数据集的前n个元素组成的数组takeSample(withReplacement,num, [seed])
返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子saveAsTextFile(path)
将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本saveAsSequenceFile(path)
将数据集中的元素以Hadoop sequencefile的格式保存到指定的目录下,可以使HDFS或者其他Hadoop支持的文件系统。foreach(func)
在数据集的每一个元素上,运行函数func进行更新。 -
熟悉API的操作
7.练习1
在Scala命令行中运行下面的代码
通过并行化生成rdd
对rdd1里的每一个元素乘2然后排序
过滤出大于等于十的元素
将元素以数组的方式在客户端显示
运行上述代码后,显示如下:
-
8.练习2
在Scala命令行中运行下面的代码
将rdd1里面的每一个元素先切分在压平
运行上述代码后,显示如下:
-
9.练习3
在Scala命令行中运行下面的代码
求并集
求交集
去重
运行上述代码后,显示如下:
-
10.练习4
在Scala命令行中运行下面的代码
求jion
求并集
按key进行分组
运行上述代码后,显示如下:
-
11.练习5
在Scala命令行中运行下面的代码
cogroup, 注意cogroup与groupByKey的区别
运行上述代码后,显示如下:
-
12.练习6
在Scala命令行中运行下面的代码
reduce聚合
运行上述代码后,显示如下:
-
13.练习7
在Scala命令行中运行下面的代码
按key进行聚合
按value的降序排序
运行上述代码后,显示如下:
-
Spark Java API的使用
由于Spark中Scala和Java的API几乎是一样的,这里就使用Java来完成一个wordcount案例,达到熟练Java API的目的。
14.双击桌面的Eclipse图标,打开Eclipse
双击后会弹出窗口,指定工作空间路径,直接点击OK默认路径就好。如图1:
-
15.新建Java项目
新建java项目,选中Eclipse左上角File——>New——>Java Project
输入项目名Example,选中 Use default JRE(currently ‘java’),点击Finish -
16.导入依赖的外部jar包
右击项目,选择Build Path——>Configure Build Path…
加入项目依赖的Spark Jar包。选中Libraries,单击右侧Add External JARs
找到/apps/spark/jars目录,按Ctrl+A选中该目录下所有Jar包,点击OK,再点击Apply后,再点击OK -
17.创建类
创建类,右击项目下的src目录,选中New——>Class
在Package处填写包名com.doplhin.labs,Name处填写类名WordCountJava,点击Finish -
18.编写代码
右击桌面上的wordCountJava.txt文件,选择用编辑器打开,复制文件中所有内容,粘贴到Eclipse上,再关闭编辑器即可
-
19.运行
点击Eclipse上方绿色按钮来运行代码
如上所示,显示了/apps/spark/README.md文件中,所有单词出现的次数,表示实验成功。
至此,本次实验结束啦。
Spark的Java和Scala API的使用
最新推荐文章于 2023-01-10 19:38:04 发布