Spark从入门到精通10:使用Scala开发Spark的WordCount程序

上一节我们介绍了如何使用Java语言开发一个集群模式的Spark任务:WordCount程序,但是使用Java开发出来的Spark任务显得冗长复杂。本节来介绍如何使用Scala语言开发一个本地模式的Spark任务:WordCount程序。相比之下,你就会发现Scala编写的Spark程序非常精简。

1.下载Spark安装目录下的所有Jar包

使用WinSCP工具将$SPARK_HOME/jars目录下的所有Jar包下载到本地目录如E:/sparklib中。

2.使用IDEA搭建Spark程序开发环境

  1. 打开IDEA开发工具,选择“Create New Project”,选择Scala下面的sbt工程,Next
  2. 工程名字:ScalaSparkWordCount,选择一个保存位置,比如:E:/ScalaSparkWordCount,Java版本和Scala版本需要和Spark集群环境中的保持一致,sbt版本保持默认,Finish
  3. 在ScalaSparkWordCount工程上右键单击,New,Directory,输入目录名:lib,OK
  4. 将刚才下载好的所有Jar包,复制粘贴到lib文件夹,在弹出的确认对话框中单击OK
  5. 选中lib目录下的所有的Jar包,右键,选中“Add as Libirary”,在弹出的对话框中输入库的名字,比如:spark_jars,OK

注意:IDEA构建工程的过程比较慢,请耐心等待。只有等工程构建完成后,工程的结构才会完整,写代码时才会有智能提示。可以通过更改sbt源的方式来提高构建速度,这里不作介绍。

3.编写WordCount程序

  1. 在ScalaSparkWordCount工程下的src/main/scala目录上右键,New,Package:demo,OK
  2. 在demo下面New,Scala Class:ScalaSparkWordCount.scala,种类选择:Object,OK
  3. 编写ScalaSparkWordCount.scala代码如下:
package demo
import org.apache.spark.{SparkConf, SparkContext}
object LocalWordCount {

    def main(args: Array[String]): Unit = {

        //设置Spark任务的配置选项
        //setAppName("ScalaWordCount"):设置APP的名字为:ScalaWordCount
        //setMaster("local"):设置Spark任务的运行模式为本地模式,不设的话,默认是Spark集群模式
        val conf = new SparkConf().setAppName("ScalaWordCount").setMaster("local")

        //根据配置创建SparkContext对象
        val sc = new SparkContext(conf)

        //从本地磁盘读入数据
        val lines = sc.textFile("E:\\data.txt")

        //进行分词操作
        val words = lines.flatMap(_.split(" "));

        //Map操作:每个单词记一次数
        val wordPair = words.map((_,1)) //完整写法: words.map(x => (x,1))

        //Reduce操作:将相同的Key的Value相加
        val wordcount = wordPair.reduceByKey(_+_)

        //调用Action算子:collect触发计算
        val result = wordcount.collect()

        //将结果打印在屏幕上
        result.foreach(println)

        //停止SparkContext对象
        sc.stop()
    }
}

说明:我们完全可以像上一节一样,将上述程序的运行模式设置为Spark集群模式(去掉setMaster(“local”),更改输入输出即可),并打包成Jar包放到集群中运行。但是这里演示的是一种开发调试过程中使用的本地模式,可以从本地磁盘中读取数据,将计算结果打印到屏幕上。

4.在IDEA中运行Spark程序

输入的文件E:\data.txt的内容:

I love Beijing
I love China
Beijing is the capital of China

按Ctrl + Shift + F10或者在代码上右键,Run “ScalaSparkWordCount”运行,结果如下:

image

本节介绍了使用IEDA开发工具,开发一个Spark任务的全过程,使用Spark任务的本地运行模式,可以直接在本地运行测试Spark任务,而不需要使用Spark集群测试。当本地测试通过后再修改为集群模式,打包上传到Spark集群去运行。祝你玩的愉快!

你可能感兴趣的:(Spark从入门到精通10:使用Scala开发Spark的WordCount程序)