内容:
1、RDD实战;
2、RDD的Transformation与Action;
3、RDD执行手工绘制;
RDD本身有几种操作:
Transformation(map)
Action
Controller
Cache
Checkpoint
Transformation(lazy,只是标记,并不会马上执行)
常用的:
==========例子:看文件中相同行的个数============
建文件,内容:
Hadoop
Spark
Hadoop
Flink
Scala
Java
I love
You know
You love it
Spark
Spark
package com.dt.spark.cores
import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by 威 on 2016/2/6.
* 统计文件中相同行的个数
*/
object TextLines {
def main(args:Array[String]): Unit ={
val conf = new SparkConf()//创建SparkConf对象
conf.setAppName("TextLines")//设置应用程序的名称,在程序运行的监控界面可以看到名称
conf.setMaster("local")//此时程序在本地运行,不需要安装Spark集群
val sc = new SparkContext(conf)//通过创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
val lines = sc.textFile("F:/exepro/scala/TextLines.txt")//通过HadoopRDD以及MapPartitionRDD获取文件中每一行的内容本身
val lineCount = lines.map{line=>(line,1)}//每一行变成行的行的内容与1构成的Tuple
val taxtLines = lineCount.reduceByKey(_+_)
taxtLines.collect.foreach(textLine=>println(textLine._1+":"+textLine._2))
}
}
结果:
16/02/06 20:28:44 INFO DAGScheduler: Job 0 finished: collect at TextLines.scala:23, took 0.407966 s
Flink:1
Spark:3
You know:1
Java:1
Scala:1
You love it:1
I love:1
Hadoop:2
16/02/06 20:28:44 INFO SparkContext: Invoking stop() from shutdown hook
collect去除,在本地可以,在集群就不行:
//taxtLines.collect.foreach(textLine=>println(textLine._1+":"+textLine._2))
taxtLines.foreach(textLine=>println(textLine._1+":"+textLine._2))
/**
* Return an array that contains all of the elements in this RDD.
*/
def collect(): Array[T] = withScope {
val results = sc.runJob(this, (iter: Iterator[T]) => iter.toArray)
Array.concat(results: _*)
}
collect把集群中运行的结果搜集过来。
collect之后Array中就是一个元素,只不过这个元素是Tuple
sc.textFile("/historyserverforSpark/README.md", 1).flatMap(_.split(" ")).map(word=>(word,1)).reduceByKey(_+_,1).saveAsTextFile("/historyserverforSpark /output/onclick1")
========== 画图解释transformation和action==========
HDFS存储数据
整个执行发生在Worker的Executor中
从HDFS上获取数据:textFile(不会立即读取数据,只是对HDFS文件做一个引用),产生HadoopRDD,负责对数据的分片和record的读取
然后内部会进行map,产生MapPartitionRDD
通过flatMap进行操作,对每行进行map,然后把map的结果小计起来进行flat,构成一个单一的大集合
进行map操作,对每个单词计数为1
reduceBykey产生shuffledRDD,
collect,是一个action,前面步骤都是transformation
saveAsTextFile,结果写回到HDFS
实际计算的时候,是从后往前回溯,优化的故事由此开始
回溯优化是在driver中,具体计算是在executor中
本文出自 “一枝花傲寒” 博客,谢绝转载!