码迷,mamicode.com
首页 > 其他好文 > 详细

Spark- RDD持久化

时间:2018-11-03 11:24:56      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:lis   print   cond   tap   format   也会   nsf   log   算法   

spark非常重要的一个功能特性就是可以将RDD持久化在内存中。当对进行持久化操作时,每个节点都会将自己的操作的RDD的partition持久化到内存中,并且在之后对该RDD的反复使用中,直接使用内存缓存的partition.这样的话,对于针对一个RDD反复执行多个操作的场景,就要对RDD计算一次即可,后面直接使用该RDD,而不需要反复计算多次该RDD。

巧妙使用RDD持久化,甚至在某些场景下,可以将Spark程序的性能提高10倍。对于迭代式算法和快速交互式应用来说,RDD持久化,是非常重要的。

要持久化一个RDD,只要调用其cache()或者persist()方法即可。在该RDD第一次计算出来时,就会直接缓存在每个节点中而且spark的持久化机制还是会自动容错的,如果持久化的RDD的任何partition丢失了,那么spark会自动通过其源RDD,使用transformation操作重新计算该partition

cache()和persisit()的区别在于,cache()是persist()的一和简化方式,cache()的底层调用persist()的无参版本,同时就是调用persist(MEMORY_ONLY),将数据持久化到内存中。如果需要在内存中清除缓存,那么可以使用unpersist()方法。

spark自己也会在shuffle操作时,进行数据的持久化,比如写入磁盘,主要是为了在节点失败时,避免需要重新计算整个过程。

 

package cn.rzlee.spark;

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

/**
 * @Author ^_^
 * @Create 2018/11/3
 */
public class Persist {

    public static void main(String[] args) {

        SparkConf conf = new SparkConf().setAppName("Persist").setMaster("local[2]");
        JavaSparkContext sc = new JavaSparkContext(conf);

        JavaRDD<String> lines = sc.textFile("C:\\Users\\txdyl\\Desktop\\log\\in\\data.txt", 1).cache();
        long beginTime = System.currentTimeMillis();
        long count = lines.count();
        System.out.println(count);
        long endTime = System.currentTimeMillis();
        System.out.println("cost "+(endTime - beginTime) + "millisecond");


        beginTime = System.currentTimeMillis();
        count = lines.count();
        System.out.println(count);
        endTime = System.currentTimeMillis();
        System.out.println("cost "+(endTime - beginTime) + "millisecond");

        sc.close();
    }
}

 

Spark- RDD持久化

标签:lis   print   cond   tap   format   也会   nsf   log   算法   

原文地址:https://www.cnblogs.com/RzCong/p/9899936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!