spark基础实例wordCount
基础配置完成之后,写代码更方便
基础配置
idea创建spark项目
创建maven项目
名字和地址写合适自己的
创建好了之后
把src删了然后创建spark文件夹,因为学习的话可能还有别的组件,
放在一个项目里呗,当然不删除也行,看自己了
创建spark文件夹的方法:项目名称,点击右键然后新建一个module
然后下载scala插件,如果有的话就不用了下载了,没有的话
点击file 然后点击 setting,然后点击plugins 里面搜索 scala
点击install下载,下载好了之后
点击file,然后点击project structure
点击+号
选择scala SDK
然后点击 download 下载需要的版本,我这边下载了2个版本,是学习的时候 实验用的,自己用的话下载一个版本就行了,建议是2.12
下载好了之后 然后勾选上就行了
spark项目的pom文件配置
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.paranamer</groupId>
<artifactId>paranamer</artifactId>
<version>2.8</version>
</dependency>
</dependencies>
创建datas文件夹,这个文件夹就直接用directory 就行了
里面创建两个txt文件,一会用来做测试使用
1和2txt 都写的相同的内容,这个里面内容不重要,写啥都行
然后在spark =》src =》main =》java下创建自己的包,自己的scala 文件 选择object的类型的
我这里一共是3中方式
Spark01_wordCount
package bigdata.sparkCore
import org.apache.spark.{SparkConf, SparkContext}
object Spark01_wordCount {
def main(args: Array[String]): Unit = {
//Application
//Spark框架
//Todo 建立和Spark框架的连接
val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount");
val sc = new SparkContext(sparkConf);
//Todo 执行业务操作
//1.读取文件,获取一行一行的数据
//”hello word“,”hello spark“
val lines = sc.textFile("datas/*")
//2.将一行数据进行拆分,形成一个一个的单词(分词)
//将整体拆分为个体的操作:扁平化
//”hello word“,”hello spark“ => “hello”,“word”, “hello”,“spark”
val words = lines.flatMap(_.split(" "))
//3.将数据根据单词进行分组,便于统计
//“hello”,“word”, “hello”,“spark” => ("hello","hello"),(“spark”),(“word”)
val wordGroup = words.groupBy(word => word)
//4.对分组后的数据进行转换
// ("hello","hello"),(“spark”),(“word”) => ("hello",2),(“spark”,1),(“word”,1)
val wordToCount = wordGroup.map {
case (word, list) => {
(word, list.size)
}
}
//5.将转换结果,采集到控制台打印出来
val arr = wordToCount.collect()
arr.foreach(println);
//Todo 关闭连接
sc.stop();
}
}
Spark02_wordCount
package bigdata.sparkCore
import org.apache.spark.{SparkConf, SparkContext}
object Spark02_wordCount {
def main(args: Array[String]): Unit = {
//Application
//Spark框架
//Todo 建立和Spark框架的连接
val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount");
val sc = new SparkContext(sparkConf);
//Todo 执行业务操作
//1.读取文件,获取一行一行的数据
val lines = sc.textFile("datas/*")
//2.将一行数据进行拆分,形成一个一个的单词(分词)
val words = lines.flatMap(_.split(" "))
//3.标识每个单词
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)
}
)
}
}
//6.将转换结果,采集到控制台打印出来
val arr = wordToCount.collect()
arr.foreach(println);
//Todo 关闭连接
sc.stop();
}
}
Spark03_wordCount
package bigdata.sparkCore
import org.apache.spark.{SparkConf, SparkContext}
object Spark03_wordCount {
def main(args: Array[String]): Unit = {
//Application
//Spark框架
//Todo 建立和Spark框架的连接
val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount");
val sc = new SparkContext(sparkConf);
//Todo 执行业务操作
//1.读取文件,获取一行一行的数据
val lines = sc.textFile("datas/*")
//2.将一行数据进行拆分,形成一个一个的单词(分词)
val words = lines.flatMap(_.split(" "))
//3.标识每个单词
val wordToOne = words.map(
word => (word, 1)
)
//4.spark框架提供了更多的功能,可以将分组和聚合使用一个方法实现
//reduceByKey相同的Key的数据,可以对value进行reduce聚合
val wordToCount = wordToOne.reduceByKey(_+_)
//5.将转换结果,采集到控制台打印出来
val arr = wordToCount.collect()
arr.foreach(println);
//Todo 关闭连接
sc.stop();
}
}