spark基础实例wordCount

基础配置完成之后,写代码更方便

基础配置

idea创建spark项目

spark官方案例 spark实例教程_Group


创建maven项目

spark官方案例 spark实例教程_spark_02


名字和地址写合适自己的

创建好了之后

spark官方案例 spark实例教程_spark官方案例_03

把src删了然后创建spark文件夹,因为学习的话可能还有别的组件,

放在一个项目里呗,当然不删除也行,看自己了

spark官方案例 spark实例教程_数据_04

创建spark文件夹的方法:项目名称,点击右键然后新建一个module

然后下载scala插件,如果有的话就不用了下载了,没有的话

点击file 然后点击 setting,然后点击plugins 里面搜索 scala

spark官方案例 spark实例教程_spark_05


点击install下载,下载好了之后

点击file,然后点击project structure

spark官方案例 spark实例教程_数据_06

点击+号

spark官方案例 spark实例教程_Group_07


选择scala SDK

spark官方案例 spark实例教程_数据_08


然后点击 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文件,一会用来做测试使用

spark官方案例 spark实例教程_Group_09

spark官方案例 spark实例教程_spark_10


1和2txt 都写的相同的内容,这个里面内容不重要,写啥都行

spark官方案例 spark实例教程_spark官方案例_11


然后在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();
  }

}