Spark(四)Spark入门案例WordCount

WordCount

  • 课程学习基于scala语言,首先确保安装scala插件

增加依赖关系

  • 修改Maven项目中的POM文件,增加Spark框架的依赖关系
    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>

实现一 先词分组再转换格式为kv

package com.hongpin.bigdata.spark_core.wordcount

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.zookeeper.Environment.list

object Spark01_wordcount {
  def main(args: Array[String]): Unit = {
    //应用程序
    //Spark框架(运行应用程序的环境)

    //建立和Spark框架的连接
    //环境的基础配置
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
    val sc = new SparkContext(sparkConf)

    //执行业务操作
    // 1 读取文件,获取一行一行的数据
    val lines = sc.textFile("datas")

    // 2 将行数据进行拆分,分解成一个一个的单词
    val words = lines.flatMap(_.split(" "))

    // 3 将单词进行分组,便于统计
    val wordGroup = words.groupBy(word => word)

    // 4 对分组后的数据进行转换
    val wordToCount = wordGroup.map {
      case (word, list) => {
        (word, list.size)
      }
    }

    // 5 将转换结果打印输出
    val array = wordToCount.collect()
    array.foreach(println)

    //关闭连接
    sc.stop()
  }
}

实现二 先kv再聚合

package com.hongpin.bigdata.spark_core.wordcount

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

object Spark02_wordcount {
  def main(args: Array[String]): Unit = {
    //应用程序
    //Spark框架(运行应用程序的环境)

    //建立和Spark框架的连接
    //环境的基础配置
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
    val sc = new SparkContext(sparkConf)

    //执行业务操作
    // 1 读取文件,获取一行一行的数据
    val lines = sc.textFile("datas")

    // 2 将行数据进行拆分,分解成一个一个的单词
    val words = lines.flatMap(_.split(" "))

    // 3 将单词进行格式转换,变成(hello,1)
    val wordToOne = words.map(
      word => (word, 1)
    )

    // 4 将单词放在一个组
    val wordGroup = wordToOne.groupBy(t => t._1)

    // 5 聚合
    val wordToCount = wordGroup.map {
      case (word, list) => {
        list.reduce(
          (t1, t2) => {
            (t1._1,t1._2 + t2._2)
          }
        )
      }
    }

    // 5 将转换结果打印输出
    val array = wordToCount.collect()
    array.foreach(println)

    //关闭连接
    sc.stop()
  }
}

实现三 Spark框架功能reduceByKey

package com.hongpin.bigdata.spark_core.wordcount

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

object Spark03_wordcount {
  def main(args: Array[String]): Unit = {
    //应用程序
    //Spark框架(运行应用程序的环境)

    //建立和Spark框架的连接
    //环境的基础配置
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
    val sc = new SparkContext(sparkConf)

    //执行业务操作
    // 1 读取文件,获取一行一行的数据
    val lines = sc.textFile("datas")

    // 2 将行数据进行拆分,分解成一个一个的单词
    val words = lines.flatMap(_.split(" "))

    // 3 将单词进行格式转换,变成(hello,1)
    val wordToOne = words.map(
      word => (word, 1)
    )

    // 4 Spark框架提供了更多的功能,可以将分组和聚合使用一个方法实现
    // reduceByKey : 相同的key,可以对value进行reduce聚合
    val wordToCount = wordToOne.reduceByKey(_ + _)

    // 5 将转换结果打印输出
    val array = wordToCount.collect()
    array.foreach(println)

    //关闭连接
    sc.stop()

  }
}

遇到的问题及解决方法

问题

ERROR SparkContext: Error initializing SparkContext.
                    A master URL must be set in your configuration

解决方法

  • 修改代码为如下内容:
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
val sc = new SparkContext(sparkConf)
posted @ 2024-09-20 17:00  一年都在冬眠  阅读(70)  评论(0)    收藏  举报