RDD有几种操作:Transformation(算子),Action(触发作业,的结果foreach、reduce、saveasTextFile等),Controller(性能和容错方面persist、cache、checkpoint)
reduce要符合交换律和结合律 foreach不可以进行模式匹配 collect把各个节点计算的结果汇总到Driver package com.tom.spark
import org.apache.spark.{SparkConf, SparkContext}
/**
* 计算相同行出现的次数
*/
object TextLines {
def main(args: Array[String]): Unit = {
val conf = new SparkConf() //创建SparkConf对象
conf.setAppName("Wow My First Spark App!") //设置应用程序的名称,在程序运行的监控界面可以看到
conf.setMaster("local") //此时程序在本地运行,不需要安装Spark集群
val sc = new SparkContext(conf) //创建SparkContext对象,通过传入SparkConf实例,来定制Spark运行的具体参数和配置信息
val lines = sc.textFile("F:/helloSpark.txt") //通过HadoopRDD以及MapPartitionsRDD获取文件中每一行的内容本身
val lineCount = lines.map( (_, 1)) //每一行变成行的内容与1构成的Tuple
val textLine = lineCount.reduceByKey(_ + _)
textLine.collect.foreach( pair => println(pair._1 + ":" +pair._2)) //collect是把结果抓到Driver上,foreach的Array中只有一个元素,只不过元素
是一个Tuple。
}
}
例子中Array中只有一个元素,只不过元素是一个Tuple。 shuffle触发新的stage,action触发job。saveAsTextJob内部有Action,所以会触发job

|