大数据第十五周 Spark编程基础实例——wordCount编程

第十五周 Spark编程基础实例——wordCount编程

  1. Shell下编写wordCount
    1. 测试文件
  • 创建一个本地文件word.txt,内含多行文本,每行文本由多个单词构成,单词之间用空格分隔,编写spark程序统计每个单词出现的次数。
  • 打开spark-shell

  1. 导入数据
  • scala> val lines=sc.textFile("file:///home/caiyishuai/student00/tuesAm/word.txt")

scala> lines.collect()

  1. 分词
  • Map操作可以在每行词结尾追加,似乎不能用于分词。

    val aftermap = lines.map(x=>x+10)

    aftermap.collect()

  • flatMap操作是拍扁压平的,它在没有限定以什么形式分词的情况下是将所有单词以单个字母为的单位拆分,如下图所示。

    scala> val afterflatmap=lines.flatMap(x=>x+10)

    scala> afterflatmap.collect()

  • 对flatMap添加参数,下划线通配符,这种是scala在spark下特殊的写法,里面的是个function。如图所示,x.split(" ")表示以空格为分隔符分割单词。它成功实现了分词。

    scala> val afterflatmap=lines.flatMap(x=>x.split(" "))

    scala> afterflatmap.collect()

  1. 构造键值对
  • 这时,我们可以使用map构造键值对,每个单词作为键,1作为值。

    scala> val mkKV=afterflatmap.map((_,1))

    scala> mkKV.collect()

  1. 计数
  • 接下来对键值对聚合,相同的键,它的值才可以对应想加。我们使用reduceByKey来实现相同单词,其值相加的操作。

    scala> val afterreduce=mkKV.reduceByKey((x,y)=>x+y)

    scala> afterreduce.collect()

  1. 输出并保存
  • afterreduce.saveAsTextFile("file:///home/caiyishuai/student00/tuesAm/wordout2.txt")

    在对应文件夹里,打开输出的wordout2文件夹,可以看到数据存放的分区。RDD 分区的原则要使得分区的个数尽量等于集群中的CPU核心(core)数目,这样可以,增加并行度,且在一个分区内进行计算可以减少通信损耗,尽可能得提速。

  • 也可以自行调整分区,在textFile后添加分区数。

  • RDD编程可以把所有得代码合并到一句话,这也正是它区别于Java等其它语言得优势所在。

    scala> sc.textFile("file:///home/caiyishuai/student00/tuesAm/word.txt").flatMap(x=>x.split(" ")).map((_,1)).reduceByKey((x,y)=>x+y).saveAsTextFile("file:///home/caiyishuai/student00/tuesAm/wordout2")

  1. Idea下编写wordCount
  • 当代码量大时,为方便,就考虑利用开放工具。Scala可以用Ideal编程。
  • 启动并新建一个项目。

  • 点击这个项目右键新建一个package。因为scala的很多项目要用于共享,所以包名要确保全球唯一,写的时候一般就是url反着写。

  • 点击新建的包,右键新建object。Scala需要建立实体object才能运行。
  • 需要导入Spark和Hadoop得相关包。进入Project Structure中选择Java包。因为 Scala 最后生成的是jar包。

    import org.apache.spark.{Partitioner,SparkContext,SparkConf}

    同时在File-Project Structure下导入Hadoop-2.7/lib/native下得两个包,和

  • 在Run下面选择Edit Configuration,按照如下内容进行设置。

  • 最后运行成功

posted on 2020-06-10 19:01  蔡军帅  阅读(629)  评论(0编辑  收藏  举报