使用Scala編寫Map Reduce的模板

 def main(args: Array[String]): Unit = {


    //1.配置 spark 任務相關信息
    val sparkConf = new SparkConf();

    //配置人物名字
    sparkConf.setAppName("word count")

    //配置運行模式:本地模式
    sparkConf.setMaster("local[*]")

    //2.運行 spark 程序的上下文環境
    val sc = new SparkContext(sparkConf)

    //配置 hdfs 集羣位置
    sc.hadoopConfiguration.set("fs.defaultFS", "hdfs://ns1")
    sc.hadoopConfiguration.set("dfs.nameservices", "ns1")
    sc.hadoopConfiguration.set("dfs.ha.namenodes.ns1", "nn1,nn2")
    sc.hadoopConfiguration.set("dfs.namenode.rpc-address.ns1.nn1", "master:9000")
    sc.hadoopConfiguration.set("dfs.namenode.rpc-address.ns1.nn2", "slave1:9000")
    sc.hadoopConfiguration.set("dfs.client.failover.proxy.provider.ns1", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider")


//    //讀取文件內容,以行爲單位放入 doc 集合
//    val doc = sc.textFile("/ip-action.dat")
//
//    //去除每行的單詞並壓平
//    val words = doc.flatMap(_.split("\\s+"))
//
//    //以單詞爲key ,數字 1 爲 value 進行輸出
//    val map = words.map((_, 1))
//
//    //以單詞爲 key 進行聚合,通過自定義函數處理聚合後的 value
//    val reduce = map.reduceByKey(_ + _)
//
//      //保存計算結果到hdfs
//      reduce.saveAsTextFile("/word-count-7")

    //簡化版
    sc.textFile("/ip-action.dat")
      .flatMap(_.split("\\s+").map((_, 1)))
      .reduceByKey(_ + _)
//      .collect()//計算結果收集到內存中
      .take(10)//取前 10 條數據
      .foreach({ //遍歷輸出計算結果
        println(_)
    })

    //3.關閉sc
    sc.stop()

  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章