Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

这篇具有很好参考价值的文章主要介绍了Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/0qE1L】


一、词频统计准备工作

1.1 安装Scala2.12.15

  • 从Scala官网下载Scala2.12.15 - https://www.scala-lang.org/download/2.12.15.html
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 安装在默认位置
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 安装完毕
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 在命令行窗口查看Scala版本(必须要配置环境变量)
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

1.2 启动集群的HDFS与Spark

  • 启动HDFS服务
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 启动Spark集群
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

1.3 在HDFS上准备单词文件

  • 在master虚拟机上创建单词文件 - words.txt
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 将单词文件上传到HDFS指定目录/wordcount/input
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

二、本地模式运行Spark项目

2.1 新建Maven项目

  • JDK选1.8
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 创建完成
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • java目录改成scala目录
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 重名为scala
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

2.2 添加项目相关依赖

  • pom.xml文件里添加依赖,并告知源程序目录已改成scala
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.kox.rdd</groupId>
    <artifactId>SparkRDDWordCount</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.1.3</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
    </build>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

2.3 创建日志属性文件

  • resources目录里创建日志属性文件 - log4j.properties
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
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

2.4 添加Scala SDK

Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

2.5 创建HDFS配置文件

  • resources目录里创建hdfs-site.xml文件,允许客户端使用数据节点
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <description>only config in clients</description>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
</configuration>

2.6 创建词频统计单例对象

  • 创建cn.kox.rdd包,然后在包里创建WordCount单例对象
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
package cn.kox.rdd
import org.apache.spark.{SparkConf, SparkContext}
/**
 * @ClassName: WordCount
 * @Author: Kox
 * @Data: 2023/6/11
 * @Sketch:
 */
object WordCount {
  def main(args: Array[String]): Unit = {
    // 创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("SparkRDDWordCount") // 设置应用名称
      .setMaster("local[*]") // 设置主节点位置(本地调试)
    // 基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    // 定义输入路径
    val inputPath = "hdfs://master:9000/wordcount/input"
    // 定义输出路径
    val outputPath = "hdfs://master:9000/wordcount/output"
    // 进行词频统计
    val wc = sc.textFile(inputPath) // 读取文件,得到RDD
      .flatMap(_.split(" ")) // 扁平化映射,得到单词数组
      .map((_, 1)) // 针对每个单词得到二元组(word, 1)
      .reduceByKey(_ + _) // 按键进行聚合(key相同,value就累加)
      .sortBy(_._2, false) // 按照单词个数降序排列
    // 在控制台输出词频统计结果
    wc.collect.foreach(println)
    // 将词频统计结果写入指定文件
    wc.saveAsTextFile(outputPath)
    // 停止Spark容器,结束任务
    sc.stop
  }
}

2.7 运行程序,查看结果

  • 首先看控制台输出结果
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 然后查看HDFS上的结果文件
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 显示结果文件内容
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 有两个结果文件,可以分别查看其内容
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 再次运行程序,会报错说输出目录已经存在
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 执行命令: hdfs dfs -rm -r /wordcount/output,删除输出目录
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
  • 再次运行程序,查看结果
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

2.8 修改程序,使用命令行参数

object WordCount {
  def main(args: Array[String]): Unit = {
    // 创建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://master:9000/wordcount/input"
      outputPath = "hdfs://master:9000/wordcount/output"
    } else if (args.length == 2) {
      inputPath = args(0)
      outputPath = args(1)
    } else {
      println("温馨提示:命令行参数个数只能是0或2~")
      return
    }
    // 进行词频统计
    val wc = sc.textFile(inputPath)  // 读取文件,得到RDD
      .flatMap(_.split(" ")) // 扁平化映射,得到单词数组
      .map((_, 1)) // 针对每个单词得到二元组(word, 1)
      .reduceByKey(_ + _) // 按键进行聚合(key相同,value就累加)
      .sortBy(_._2, false) // 按照单词个数降序排列
    // 在控制台输出词频统计结果
    wc.collect.foreach(println)
    // 将词频统计结果写入指定文件
    wc.saveAsTextFile(outputPath)
    // 停止Spark容器,结束任务
    sc.stop
  }
}
  • 创建/home/test.txt文件,上传到HDFS指定目录
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

  • 打开配置窗口
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目

  • 运行程序,查看结果
    Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目文章来源地址https://www.toymoban.com/news/detail-479669.html

到了这里,关于Spark大数据处理学习笔记(2.4)IDEA开发词频统计项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark大数据处理讲课笔记3.7 Spark任务调度

    理解DAG概念 了解Stage划分 了解RDD在Spark中的运行流程 DAG(Directed Acyclic Graph) 叫做 有向无环图 ,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG。DAG是一种非常重要的图论数据结构。如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图就

    2024年02月09日
    浏览(38)
  • Spark大数据处理讲课笔记4.1 Spark SQL概述、数据帧与数据集

      目录 零、本讲学习目标 一、Spark SQL (一)Spark SQL概述 (二)Spark SQL功能 (三)Spark SQL结构 1、Spark SQL架构图 2、Spark SQL三大过程 3、Spark SQL内部五大组件 (四)Spark SQL工作流程 (五)Spark SQL主要特点 1、将SQL查询与Spark应用程序无缝组合 2、Spark SQL以相同方式连接多种数据

    2024年02月09日
    浏览(56)
  • Spark大数据处理讲课笔记---Spark RDD典型案例

    利用RDD计算总分与平均分 利用RDD统计每日新增用户 利用RDD实现分组排行榜 针对成绩表,计算每个学生总分和平均分   读取成绩文件,生成lines;定义二元组成绩列表;遍历lines,填充二元组成绩列表;基于二元组成绩列表创建RDD;对rdd按键归约得到rdd1,计算总分;将rdd1映射

    2024年02月06日
    浏览(38)
  • 【大厂AI课学习笔记】【2.2机器学习开发任务实例】(3)数据准备和数据预处理

    项目开始,首先要进行数据准备和数据预处理。 数据准备的核心是找到这些数据,观察数据的问题。 数据预处理就是去掉脏数据。 缺失值的处理,格式转换等。 延伸学习: 在人工智能(AI)的众多工作流程中,数据准备与预处理占据着举足轻重的地位。这两个步骤不仅影响

    2024年02月19日
    浏览(31)
  • Spark大数据处理讲课笔记4.2 Spark SQL数据源 - 基本操作

      目录 零、本讲学习目标 一、基本操作 二、默认数据源 (一)默认数据源Parquet (二)案例演示读取Parquet文件 1、在Spark Shell中演示 2、通过Scala程序演示 三、手动指定数据源 (一)format()与option()方法概述 (二)案例演示读取不同数据源 1、读取房源csv文件 2、读取json,保

    2024年02月09日
    浏览(32)
  • Spark大数据处理讲课笔记--- RDD持久化机制

    理解RDD持久化的必要性 了解RDD的存储级别 学会如何查看RDD缓存 Spark中的RDD是懒加载的,只有当遇到行动算子时才会从头计算所有RDD,而且当同一个RDD被多次使用时,每次都需要重新计算一遍,这样会严重增加消耗。为了避免重复计算同一个RDD,可以将RDD进行持久化。 Spark中

    2024年02月06日
    浏览(35)
  • Spark重温笔记(四):秒级处理庞大数据量的 SparkSQL 操作大全,能否成为你的工作备忘指南?

    前言:今天是温习 Spark 的第 4 天啦!主要梳理了 SparkSQL 工作中常用的操作大全,以及演示了几个企业级案例,希望对大家有帮助! Tips:\\\"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博

    2024年04月11日
    浏览(34)
  • 学习笔记3 | 高维数据处理——Xarray

    一、数据结构 1.DataArray (1)DataArray的创建 (2)DataArray的属性及常用方法 2.DataSet (1)DataSet的创建 (2)DataSet的属性和常用方法 二、数据的读取 1.读取nc文件 2.读取grib文件 3.读取多个文件并 合并 三、数据的索引 1.通过位置索引 2.通过名字索引 四、数据的坐标系统 1.修改坐

    2024年02月13日
    浏览(36)
  • PyQt5学习笔记--多线程处理、数据交互

    目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 ① 如果Qt只采用单线程任务的方式,当遇到数据处理慢的情形时,会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷: ③ 代码: ④ 结果展示: 当点击第一个button时,GUI会出现卡

    2023年04月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包