spark transformation算子 action算子 控制算子Chekpoint persist cache

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;

public class SparkTest {
public static void main(String[] args) {

    SparkConf conf = new SparkConf();
    conf.setMaster("local");
    conf.setAppName("checkPoint");
    JavaSparkContext sc = new JavaSparkContext(conf);
    sc.setCheckpointDir("./data/ck");
    ///** Distribute a local Scala collection to form an RDD. */
    JavaRDD<? extends Number> parallelize = sc.parallelize(Arrays.asList(1, 1.2, 3.4, 4));
    parallelize.checkpoint();
    parallelize.count();
    sc.stop();
    /**
     * checkpoint将RDD持久化到磁盘,还可以切断RDD之间的依赖关系。checkpoint目录数据当application执行完之后不会被清除。
     * checkpoint 的执行原理:
     * 1.	当RDD的job执行完毕后,会从finalRDD从后往前回溯。
     * 2.	当回溯到某一个RDD调用了checkpoint方法,会对当前的RDD做一个标记。
     * 3.	Spark框架会自动启动一个新的job,重新计算这个RDD的数据,将数据持久化到HDFS上。
     * 优化:对RDD执行checkpoint之前,最好对这个RDD先执行cache,这样新启动的job只需要将内存中的数据拷贝到HDFS上就可,
     * 省去了重新计算这一步。
     * :sc.setCheckpointDir("./checkpoint");sc.parallelize(A);import org.apache.spark.api.java.JavaRDD
            * import java.util
            * val parallelize: JavaRDD[Integer] = sc.parallelize(util.Arrays.asList(1, 2, 3))
            *parallelize.checkpoint()
            *
     *
     */



}

}


import org.apache.spark.rdd.RDD
import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}

object SparkTransformtions {

def main(args: Array[String]): Unit = {

val conf = new SparkConf()
//Spark运行模式 local standone yarn mesos
conf.setMaster("local")
conf.setAppName("AppSpark")
//取得上下文
val sc = new SparkContext()
//textFile相当于mr中map的split() 默认情况下切片大小128M,1个切片1个分区;结果得到RDD
/**RDD(五大特性)
  * Internally, each RDD is characterized by five main properties:
  * *
  * *  - A list of partitions
  * *  - A function for computing each split
  * *  - A list of dependencies on other RDDs
  * *  - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
  * *  - Optionally, a list of preferred locations to compute each split on (e.g. block locations for
  * *    an HDFS file)
  * 1.	RDD是由一系列的partition组成的。
  * 2.	函数是作用在每一个partition(split)上的。
  * 3.	RDD之间有一系列的依赖关系。
  * 4.	分区器是作用在K,V格式的RDD上。
  * 5.	RDD提供一系列最佳的计算位置
  */

val lines: RDD[String] = sc.textFile("./data/word")

/**
  *Transformations类算子是一类算子(函数)叫做转换算子,如map,flatMap,reduceByKey等。
  * Transformations算子是延迟执行,也叫懒加载执行
  *
  */
/**
  * Action类算子也是一类算子(函数)叫做行动算子,如foreach,collect,count等。Transformations类算子是延迟执行,
  * Action类算子是触发执行。一个application应用程序中有几个Action类算子执行,就有几个job运行
  */


//Transformation类算子filter:过滤符合条件的记录数,true保留,false过滤掉。
//
val word = lines.filter("hello hadoop".equals(_))
word.foreach(println)

//Transformation类算子sample:随机抽样算子,根据传进去的小数按比例进行又放回或者无放回的抽样
word.sample(true,0.1 ,100)
//Transformation类算子reduceByKey:将相同的Key根据相应的逻辑进行处理。
//Transformation类算子sortByKey/sortBy:作用在K,V格式的RDD上,对key进行升序或者降序排序。
/**
  * 控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化,
  * 持久化的单位是partition。cache和persist都是懒执行的。必须有一个action类算子触发执行。
  * checkpoint算子不仅能将RDD持久化到磁盘,还能切断RDD之间的依赖关系。
  * cache()=persiet
  * 默认将RDD的数据持久化到内存中。cache是懒执行。
  *
  */
//cache
val acache: RDD[String] = word.cache()
//persist
/**peisist控制算子刺绣cache()相当于word.persist(StorageLevel.MEMORY_ONLY)
* val NONE = new StorageLevel(false, false, false, false)
  * val DISK_ONLY = new StorageLevel(true, false, false, false)
  * val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2)
  * val MEMORY_ONLY = new StorageLevel(false, true, false, true)
  * val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2)
  * val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false)
  * val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2)
  * val MEMORY_AND_DISK = new StorageLevel(true, true, false, true)
  * val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2)
  * val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false)
  * val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)
  * val OFF_HEAP = new StorageLevel(true, true, true, false, 1)
 */
val persist: RDD[String] = word.persist(StorageLevel.MEMORY_ONLY)

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值