1.以本地模式进行Spark API实战map、filter
首先以Spark的本地模式测试Spark API,以Local的方式运行spark-shell:
我们从前面已经使用过的parallelize出发:
下面进行filter操作:
但是,需要注意的是,最“正宗”的写法应该是以下函数式编程的风格:
采用这种方式,即符合Scala风格的写法,也是符合Spark的应用程序风格的写法,在Spark的编程中,大多数功能的实现都只要一行代码即可完成。
2.以集群模式进行Spark API实战textFile、cache
首先启动HDFS集群:
然后启动Spark集群:
最后让spark-shell运行在Spark集群上:
查看一下在前面章节中曾经上传到HDFS上的“README.md”这个问题,如图4-4所示。
图4-4 查看上传到HDFS上的“README.md”
下面读取该文件:
使用count统计一下该文件的行数:
下面对该RDD进行cache操作并执行count使得缓存生效:
此时耗时0.524046338 s,下面再次执行count操作:
此时是0.140096672 s,这是因为我们是直接基于cache后的数据进行的操作。
接着对上面的RDD进行wordcount操作:
通过saveAsTextFile把数据保存起来:
此时通过Web控制台查看一下运行结果,如图4-5所示。
进入文件夹后的效果如图4-6所示。
图4-5 通过Web控制台查看运行结果
图4-6 进入文件夹后的效果
进入查看执行结果,如果4-7所示。
图4-7 查看执行结果
3.在Spark中实现对Job输出结果进行排序
从wordcount的输出结果可以看出其执行结果是未经排序的,如何对Spark的输出结果进行排序呢?这个问题对于广告点击或者商品排名都是非常重要的。
在Spark中,其实用一行代码即可解决排序问题,如下所示。
我们是按照降序排序结果,此时HDFS的输出结果如图4-8所示。
图4-8 HDFS的输出结果
进入resultSorted文件夹,如图4-9所示。
图4-9 resultSorted文件夹
可以发现我们成功对输出结果进行了排序!
4.动手实战union、groupByKey、join
下面看一下union的使用:
使用collect操作查看一下执行结果:
下面看一下groupByKey的使用方法:
使用collect查看一下结果:
join操作就是一个笛卡儿积操作的过程,具体示例如下所示。
对rdd1和rdd2执行join操作:
使用collect查看执行结果:
可以看出join操作完全是一个笛卡尔积的操作。