您的位置 首页 教育

Spark:词频统计

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、提出任务 二、完成任务 (一)…

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

    • 一、提出任务
    • 二、完成任务
      • (一)新建Maven项目
      • (二)添加相关依赖和构建插件
      • (三)创建日志属性文件
      • (四)创建词频统计单例对象
      • (五)本地运行程序,查看结果

一、提出任务

  • 单词计数是学习分布式计算的入门程序,有很多种实现方式,例如MapReduce;使用Spark提供的RDD算子可以更加轻松地实现单词计数。

  • 在IntelliJ IDEA中新建Maven管理的Spark项目,并在该项目中使用Scala语言编写Spark的WordCount程序,最后将项目打包提交到Spark集群(Standalone模式)中运行。

  • 预备工作:启动集群的HDFS与Spark

  • HDFS上的单词文件 – words.txt

二、完成任务
(一)新建Maven项目

  • 新建Maven项目,基于JDK1.8
  • 设置项目信息(项目名称、保存位置、组编号以及项目编号)

单击【Finish】按钮

  • 将java目录改成scala目录

(二)添加相关依赖和构建插件

  • 在pom.xml文件里添加依赖与Maven构建插件

    4.0.0

    net.Lee.rdd
    sparkRDDWordCount
    1.0-SNAPSHOT

    
        
            org.scala-lang
            scala-library
            2.11.12
        
        
            org.apache.spark
            spark-core_2.11
            2.1.1
        
    
    
        src/main/scala
        
            
                org.apache.maven.plugins
                maven-assembly-plugin
                3.3.0
                
                    
                        jar-with-dependencies
                    
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            
            
                net.alchim31.maven
                scala-maven-plugin
                3.3.2
                
                    
                        scala-compile-first
                        process-resources
                        
                            add-source
                            compile
                        
                    
                    
                        scala-test-compile
                        process-test-resources
                        
                            testCompile
                        
                    
                
            
        
    

-由于源程序目录改成了scala,在元素里必须添加子元素,指定目录src/main/scala

(三)创建日志属性文件

  • 在资源文件夹里创建日指数型文件 – log4j.properties
log4j.rootLogger=ERROR, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spark.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

(四)创建词频统计单例对象

  • 在net.lj.rdd包里创建WordCount单例对象
package net.lj.rdd

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


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

    System.setProperty("HADOOP_USER_NAME","root")
    //创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("SparkRDDWordCount") //设置应用名称
      .setMaster("local[*]") //设置主节点位置


    //基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf);

    //判断命令行参数个数
    var inputPath = "";
    var outputPath = "";
    if (args.length == 0) {
      inputPath = "hdfs://192.168.23.10:9000/input/word.txt";
      outputPath = "hdfs://192.168.23.10:9000/WC_result";
    } else if (args.length == 1) {
      inputPath = args(0); //用户指定
      outputPath = "hdfs://192.168.23.10:9000/WC_result";
    } else if (args.length == 2) {
      inputPath = args(0);
      outputPath = args(1);

    } else {
      println()
    }

    //进行词频统计
    val wc = sc.textFile(inputPath) //读取文件,得到rdd
      .flatMap(_.split(" ")) //扁平化映射,得到单词数组
      .map((_, 1)) // 针对单词得到二元组(word,1)
      .reduceByKey(_ + _) //按键进行组合(key相同,value就累加)
      .sortBy(_._2, false) //按照单词个数降序排列
    //      .saveAsTextFile(outputPath); //词频统计结果保存到指定位置

    //输出词频统计
    wc.collect.foreach(println)
    //词频统计结果保存到指定位置
    wc.saveAsTextFile(outputPath);
    //停止Spark容器,结束任务
    sc.stop()
  }
}

(五)本地运行程序,查看结果

  • 首先看控制台输出结果
  • 查看HDFS上的结果文件内容
  • 有两个结果文件,我们可以分别查看其内容
  • 创建文本文件 – word.txt

上传到HDFS的/input目录

  • 给程序设置命令行参数(注意两个参数之间必须有空格)
hdfs://192.168.23.10:9000/input/word.txt hdfs://192.168.23.10:9000/word_result

  • 运行程序,查看控制台输出结果
  • 查看HDFS上的结果文件内容

本文来自网络,不代表0514资讯网立场,转载请注明出处:https://www.0514zx.com/info/12537.html
0514zx.com

作者: 0514zx.com

优质职场领域创作者
联系我们

联系我们

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部