RDD有幾種操作:Transformation(算子),Action(觸發(fā)作業(yè),的結果foreach、reduce、saveasTextFile等),Controller(性能和容錯方面persist、cache、checkpoint)
reduce要符合交換律和結合律 foreach不可以進行模式匹配 collect把各個節(jié)點計算的結果匯總到Driver package com.tom.spark
import org.apache.spark.{SparkConf, SparkContext}
/**
* 計算相同行出現(xiàn)的次數(shù)
*/
object TextLines {
def main(args: Array[String]): Unit = {
val conf = new SparkConf() //創(chuàng)建SparkConf對象
conf.setAppName("Wow My First Spark App!") //設置應用程序的名稱,在程序運行的監(jiān)控界面可以看到
conf.setMaster("local") //此時程序在本地運行,不需要安裝Spark集群
val sc = new SparkContext(conf) //創(chuàng)建SparkContext對象,通過傳入SparkConf實例,來定制Spark運行的具體參數(shù)和配置信息
val lines = sc.textFile("F:/helloSpark.txt") //通過HadoopRDD以及MapPartitionsRDD獲取文件中每一行的內(nèi)容本身
val lineCount = lines.map( (_, 1)) //每一行變成行的內(nèi)容與1構成的Tuple
val textLine = lineCount.reduceByKey(_ + _)
textLine.collect.foreach( pair => println(pair._1 + ":" +pair._2)) //collect是把結果抓到Driver上,foreach的Array中只有一個元素,只不過元素
是一個Tuple。
}
}
例子中Array中只有一個元素,只不過元素是一個Tuple。 shuffle觸發(fā)新的stage,action觸發(fā)job。saveAsTextJob內(nèi)部有Action,所以會觸發(fā)job

|