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)

浙公网安备 33010602011771号