用spark实现单词统计

1.在本地运行

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

/**
  * 用spark实现单词统计
  */
object SparkWordCount {
 def main(args: Array[String]): Unit = {
    /**
      * 1.创建sparkConf对象,并设置App名称
      * 这个conf就是之前学习的MapReduce中的conf的配置
      * 通过这个conf对集群中的aprk-env.sh文件进行修改
      * setAppName设置集群的名字,不设置默认即是所产生的一个名字
      * setMaster设置运行模式,不写默认是提交到集群
      * 本地:
      * setMaster("local[2]")
      * setMaster("local["使用多少个core"]")   设置本地模式
      * core 值不是是核心,可以当做有多少个线程数,什么都不写或者写 * ,
      * 那么就相当于系统中有多少个空闲的线程就使用多少个线程
      */
   val conf =  new SparkConf().setAppName("SparkWordCount").setMaster("local")
       //2.创建SparkContext,提交sparkApp的人口
    val sc = new SparkContext(conf)
    /**
      * sc所调用的方法叫做算子,算子有两种:
      * transformation[只能计算没有结果] 和 action(触发得到结果)
      * 什么是RDD,transformation,action
      * RDD--通用数据结果集,想存储数据的方式---集合,数组
      * 本身不存数据,但是可以把结果集放在那里
      */
    //3.获取HDFS上的数据
    val lines: RDD[String] = sc.textFile("dir/file.txt")
    //4.将数据进行切分,并压平
    val words: RDD[String] = lines.flatMap(_.split(" "))
    //5.遍历当前数据组成二元组(key,1)
    val tuples: RDD[(String,Int)] = words.map((_,1))
    //6.进行聚合操作,相同key的value进行相加
    //hello,1  hello,1
    val sumed: RDD[(String,Int)] = tuples.reduceByKey(_+_,1)
    //7.可以对数据进行排序操作,有默认参数true,降序false  就可以
    val sorted: RDD[(String,Int)] = sumed.sortBy(_._2,false)
    //8.将数据存储到HDFS上
    val unit: Unit = sorted.saveAsTextFile("output")

    //9.回收资源停止sc,结束任务
    sc.stop()
  }
}

2.在集群上 面运行

/**
  * 用spark实现单词统计
  */
object SparkWordCount {
  def main(args: Array[String]): Unit = {
    /**
      * 1.创建sparkConf对象,并设置App名称
      * 这个conf就是之前学习的MapReduce中的conf的配置
      * 通过这个conf对集群中的aprk-env.sh文件进行修改
      * setAppName设置集群的名字,不设置默认即是所产生的一个名字
      * setMaster设置运行模式,不写默认是提交到集群
      * 本地:
      * setMaster("local[2]")
      * setMaster("local["使用多少个core"]")   设置本地模式
      * core 值不是是核心,可以当做有多少个线程数,什么都不写或者写 * ,
      * 那么就相当于系统中有多少个空闲的线程就使用多少个线程
      */
   val conf =  new SparkConf().setAppName("SparkWordCount")
       //2.创建SparkContext,提交sparkApp的人口
    val sc = new SparkContext(conf)
    /**
      * sc所调用的方法叫做算子,算子有两种:
      * transformation[只能计算没有结果] 和 action(触发得到结果)
      * 什么是RDD,transformation,action
      * RDD--通用数据结果集,想存储数据的方式---集合,数组
      * 本身不存数据,但是可以把结果集放在那里
      */
    //3.获取HDFS上的数据
    val lines: RDD[String] = sc.textFile(args(0))
    //4.将数据进行切分,并压平
    val words: RDD[String] = lines.flatMap(_.split(" "))
    //5.遍历当前数据组成二元组(key,1)
    val tuples: RDD[(String,Int)] = words.map((_,1))
    //6.进行聚合操作,相同key的value进行相加
    //hello,1  hello,1
    val sumed: RDD[(String,Int)] = tuples.reduceByKey(_+_,1)
    //7.可以对数据进行排序操作,有默认参数true,降序false  就可以
    val sorted: RDD[(String,Int)] = sumed.sortBy(_._2,false)
    //8.将数据存储到HDFS上
    val unit: Unit = sorted.saveAsTextFile(args(1))

    //9.回收资源停止sc,结束任务
    sc.stop()
  }
}

提交

spark-submit
–class SparkWordCount
–master spark://hadoop1:7077
–executor-memory 512m
–total-executor-cores 3
/root/Spark-1.0-SNAPSHOT.jar hdfs://hadoop1:8020/word.txt hdfs://hadoop1:8020/out

区别

用spark实现单词统计_第1张图片

你可能感兴趣的:(Spark)