RDD实战(DT大数据梦工厂)

内容:

1、RDD实战;

2、RDD的Transformation与Action;

3、RDD执行手工绘制;

RDD本身有几种操作:

Transformation(map)

Action

Controller

Cache

Checkpoint

Transformation(lazy,只是标记,并不会马上执行)

常用的:

spacer.gif

==========例子:看文件中相同行的个数============

建文件,内容:

Hadoop

Spark

Hadoop

Flink

Scala

Java

I love

You know

You love it

Spark

Spark

package com.dt.spark.cores

import org.apache.spark.{SparkContextSparkConf}

/**
  * 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")

spacer.gif


========== 画图解释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中

spacer.gif


本文出自 “一枝花傲寒” 博客,谢绝转载!

你可能感兴趣的:(RDD,实战)