单机Spark-单词计数Demo(Scala版)

下面是用scala语言在单机Spark环境下进行单词计数的搭建和运行过程。

1. IDEA创建scala项目

1.1 安装scala插件

scalaIDEA插件

1.2 新建scala的maven项目

maven项目

我用的scala版本是2.12.13(Spark 3.1.1需要和Scala 2.12.x一起用),需要修改pom.xml中的如下位置:

  <properties>
    <scala.version>2.12.13</scala.version>
  </properties>

注意最好添加下面两个依赖,以免后面的插件安装时报错:

    <!-- 下面两个依赖是为了解决后面插件报错而添加的 -->
    <dependency>
      <groupId>org.scala-tools</groupId>
      <artifactId>maven-scala-plugin</artifactId>
      <version>2.11</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-eclipse-plugin</artifactId>
      <version>2.5.1</version>
    </dependency>

还需要修改IDEA中这个设置,File | Settings | Build, Execution, Deployment | Compiler | Scala Compiler,将1.5改成1.8
修改设置
我们运行下helloworld程序:

/**
 * Hello world!
 *
 */
object App {
  def main(args: Array[String]): Unit = {
    println( "Hello World!" )
  }
}

运行结果
至此,项目搭建完成

2. Spark单词计数

2.1 Spark依赖

根据自己的Spark版本进行选择

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.1.1</version>
</dependency>
2.2 测试日志

模拟处理日志的场景,将单词计数提升了一下处理复杂度

2021-01-01 01:30:45 INFO JAVA|PYTHON|C++
2021-01-01 01:30:45 INFO JAVA|PYTHON|SCALA
2021-01-01 01:30:45 INFO JAVA|GO|C++
2021-01-01 01:30:45 INFO JAVA|JAVASCRIPT|C++
2021-01-02 01:30:45 ERROR NOTHING
2021-01-02 01:30:45 INFO JAVA|PHP|C++
2021-01-02 01:30:45 INFO JAVA|PYTHON|C++
2021-01-02 01:30:45 INFO JAVA|PYTHON|SCALA
2021-01-03 01:30:45 INFO JAVA|GO|C++
2021-01-03 01:30:45 WARN JAVA|JAVASCRIPT|C++
2021-01-03 01:30:45 ERROR NOTHING
2021-01-03 01:30:45 INFO JAVA|PHP|C++
2.3 处理代码
package ace.gjh.rdd

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

/**
 * Spark单词计数demo
 *
 * @author ACE_GJH
 * @date 2021/5/5
 */
object WordCount {

  def main(args: Array[String]): Unit = {
    // 1. 创建Spark运行环境配置
    val conf = new SparkConf()
      .setAppName("word-count")
      // 单机模式本机运行
      .setMaster("local[*]")
    // 2. 创建SparkContext
    val context = new SparkContext(conf)
    // 3. 生成RDD
    val rdd: RDD[String] = context.textFile("file:///E:/spark/test.log", 2)
    // 4. 数据处理
    // 4.1 消息过滤
    rdd.filter(log => "INFO".equals(log.split(" ")(2)))
      // 4.2 数字计数
      .flatMap(_.split(" ")(3).split("\\|"))
      .map((_, 1))
      .groupByKey()
      .map(t => (t._1, t._2.size))
      .sortBy(t => t._2, false, 1)
      .saveAsTextFile("file:///E:/spark/result.log")
    // 5. 释放资源
    context.stop()
  }
}
2.4 查看结果

运行结果
查看part-00000文件

(JAVA,9)
(C++,7)
(PYTHON,4)
(GO,2)
(SCALA,2)
(PHP,2)
(JAVASCRIPT,1)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭建華

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值