在本地模式下运行,必须设置 Master AppName
local模式下,不会有监控界面出现:
object WordCountLocal {
def main(args: Array[String]): Unit = {
if (args.length != 2) {
println(
"""
|cn.uhome.spark01.WordCountLocal <input> <output>
""".stripMargin)
sys.exit(1)
}
val Array(input, output) = args
// 在本地模式下运行,必须设置 Master AppName
val conf = new SparkConf()
.setMaster("local[*]")
.setAppName(this.getClass.getSimpleName)
val sc = new SparkContext(conf)
// sc.textFile("").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2).saveAsTextFile("")
//读取文件
val textFileRdd: RDD[String] = sc.textFile(input)
//将文件切分压平
val wordsRdd: RDD[String] = textFileRdd.flatMap(_.split(" "))
//将word和1组合
val wordAndOneRdd: RDD[(String, Int)] = wordsRdd.map((_, 1))
//将相同的单词分成一组,然后将value值累加
val result: RDD[(String, Int)] = wordAndOneRdd.reduceByKey((_ + _))
//对结果进行排序 指定降序的两种方式
result.sortBy(_._2, false)
// result.sortBy(-_._2)
//将结果输出到指定路径
result.saveAsTextFile(output)
sc.stop()
}
}