WC

package com.bjsxt.scala.spark.operator

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object WC {

  def main(args: Array[String]): Unit = {
    /**
     * SparkConf 是设置Spark运行时的环境变量,实际在这里面还可以设置Spark运行时所需要的资源情况。
     */
    val conf = new SparkConf()
//      .setMaster("local")
      .setAppName("word哥")

    /**
     * 通过传入SparkConf创建一个SparkCotext,SparkContext是通往集群的唯一通道,为什么是通道?
     * 	1、发送task
     * 	2、接受计算结果
     * 	3、接受运行时的信息
     * 同时说明在SparkContext初始化的时候会创建任务调度器。
     */
    val sc = new SparkContext(conf)
    /**
     * 将文件内容加载到RDD中。
     */
    val linesRDD = sc.textFile(args(0))

    val wordsRDD = linesRDD.flatMap { _.split(" ") }

    val pairRDD = wordsRDD.map { (_, 1) }

    /**
     * k:word
     * v:count
     * sortByKey : 按照key来排序 
     */
    val resultRDD = pairRDD.reduceByKey(_ + _)
    
   /* resultRDD
      .map(x=>{(x._2,x._1)})
      .sortByKey(false)
      .map(x=>{(x._2,x._1)})
      .saveAsTextFile(args(1))*/
    /**
     * collect算子会将每一个task的计算结果拉回到Driver端的内存中,所以说是比较危险的一个算子
     * saveAsTextFile是action类算子
     */
    
    resultRDD
      .sortBy(x=>{x._2}, false)
      .saveAsTextFile(args(1))

    sc.stop()
  }
}

  

posted @ 2018-06-18 15:15  uuhh  阅读(170)  评论(0)    收藏  举报