WordCount代碼如下:
import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by zhangph on 2015/11/25.
*/
object WordCount {
def main (args: Array[String]) {
if(args.length < 1){
System.err.println("Usage: <file>")
System.exit(1);
}
val conf = new SparkConf();
val sc = new SparkContext(conf)
val line = sc.textFile(args(0))
val result = line.flatMap(_.split(" ")).map(x => (x(1), 1)).reduceByKey(_+_)
//result.collect().foreach(println)
result.saveAsTextFile(args(1))
sc.stop()
}
}
val line = sc.textFile(args(0))
使用textFile函數將文件轉換爲一個RDD,該函數採用Hadoop中的TextInputFormat解析輸入數據,textFile中的每個Hadoop Block相當於一個RDD分區。
val result = line.flatMap(_.split(" ")).map(x => (x(1), 1)).reduceByKey(_+_)
flatMap將加載的數據使用空格分割後生成新的RDD;
map將每條記錄加1之後生成新的RDD;
reduceByKey將key相同的關鍵字的數據集合到一起進行函數運算。
result.collect().foreach(println)
result.saveAsTextFile(args(1))
Actions 算子
第一句是將MapReduce的結果先toArray然後再輸出每個元素;
第二句是將結果寫入到文件中。
The only way to survive was to enjoy the good moments and not dwell too much on the bed.