spark词频统计

本教程详细介绍了如何在IDEA中配置Spark单机环境,包括JDK、Scala和Spark的版本选择,以及创建Maven项目的步骤。接着,通过新建Scala对象并编写WordCount程序,实现了对指定文件的词频统计。最后,通过添加log4j.properties文件降低日志级别,使得输出结果更加清晰。
摘要由CSDN通过智能技术生成

spark词频统计


  1. idea配置spark单机环境请参考其他教程,这里我使用的版本信息如下

    • JDK:1.8.0_281
    • Scala:2.12.8
    • Spark:3.1.1
    • 开发环境:IDEA 2020.2.3
  2. idea中新建maven项目,建议jdk版本1.8及以上,单击下一步

    在这里插入图片描述

  3. 自定义项目名称,这里为experiment1,下拉选项中groupid和version也可自定义,这里分别改为com.experiment和1.0.0,单击完成

    在这里插入图片描述

  4. 右键单击项目experiment目录选择Add Framework Support…,勾选上scala后ok。

    在这里插入图片描述

    在这里插入图片描述

  5. 打开项目experiment1下的pom.xml文件,</project>标签前追加下列代码,这里的spark-core_2.123.0.0是基于上述环境版本而言,如环境版本与上述不一致,可能配置失败,可根据自己的版本进行调整。(如下载速度较慢,可参考相关教程更改maven源)

    <dependencies>
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.12</artifactId>
                <version>3.0.0</version>
            </dependency>
    </dependencies>
    

    在这里插入图片描述

    追加代码后记得单击右上角按钮更新依赖,或使用快捷键ctrl+shift+O,下载完成后关闭该文件。

  6. experiment项目目录下新建目录用于存放数据文件,这里目录名为file,文件名words,txt,与代码中保持一致,修改记得一并修改。

    在这里插入图片描述

  7. experiment->src->main->java目录下右键单击新建package,这里命名为spark

    在这里插入图片描述

    spark包下再新建package这里命名为task1

    在这里插入图片描述

    task1上右键单击新建Scala Class

    在这里插入图片描述

    选择object,这里命名为WordCount

    在这里插入图片描述

  8. 复制下列代码到WordCount文件中覆盖内容,如包名或文件路径不一致可自行修改

    package spark.task1
    // 用于构造SparkContext实例
    import org.apache.spark.{SparkConf, SparkContext}
    object WordCount {
      def main(args: Array[String]): Unit = {
        // 构造SparkConf实例用于创建SparkContext对象
        val sparkConf = new SparkConf().setMaster("local[*]").setAppName("task1")
        // 构造sparkContext对象
        val sc = new SparkContext(sparkConf)
        // 从文件中按行读取源数据为RDD,并指定分区数为8
        val info = sc.textFile("file/words.txt", 8)
        // 对源数据进行一系列的转换(transform)和行动(action)操作,得到结果,具体步骤如下
        // .flatMap(_.split(" "))使用空格对源数据进行分割,并将其扁平化
        // .map((_,1))将分割后的单词构造为键值对(word,1)的形式
        // .reduceByKey(_+_)对键值对进行聚合操作,指定聚合行为为值相加
        // .sortBy(_._2, ascending=false)按值对每个键值对降序排列
        val rst = info.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2, ascending = false)
        // 输出显示结果
        rst.foreach(println)
        sc.stop()
      }
    }
    

    编辑区域任意位置单击右键,选择run "WordCount"运行代码,得到结果

    在这里插入图片描述

  9. 发现输出结果中存在大量日志信息,影响结果展示,experiment->src->main->resources目录下新建文件,命名为log4j.properties

    在这里插入图片描述

    覆盖复制下列信息,保存,关闭

    log4j.rootCategory=ERROR, console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.target=System.err
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd/HH:mm:ss} %p %c{1}: %m%n
    log4j.logger.org.apache.spark.repl.Main=ERROR
    log4j.logger.org.spark_project.jetty=ERROR
    log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
    log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=ERROR
    log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=ERROR
    log4j.logger.org.apache.parquet=ERROR
    log4j.logger.parquet=ERROR
    log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
    log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
    
  10. 重新运行WordCount,得到纯输出结果。

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值