spark core 记录-persist对元数据的操作的影响

本文探讨了在Spark中,对同一个RDD进行不同转换操作时,数据是否会被改变,以及persist或cache操作如何影响后续操作的数据状态。通过实例演示,展示了在不使用persist时,RDD的值不会被改变;而使用persist后,后续操作会共享同一份数据,导致数据状态受前序操作影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在同一个rdd上,做不同转换的操作时,并不会改变这个rdd上的值,也不会影响其他rdd上使用原数据的结果

case class Name(var name: String, var age: Int, sex: Int)

object DateTest {

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

        val conf = new SparkConf().setAppName("test").setMaster("local[*]")

        val sc = new SparkContext(conf)

        Logger.getLogger("org").setLevel(Level.WARN)

        val data = List(Name("aaa", 1, 1), Name("bbb", 2, 0), Name("ccc", 3, 1))

        val r1 = sc.parallelize(data)

        r1.filter( r => {

            if (r.sex == 1) {

                r.name = ""

            }

            true

        }).foreach(println)

        println("--------------- ")

        r1.filter( r => {

            if (r.name.nonEmpty) {

                r.age = 999

                true

            } else false

        }).foreach(println)

    }

}

 

测试结果:

Name(bbb,2,0)

Name(,1,1)

Name(,3,1)

---------------

Name(ccc,999,1)

Name(bbb,999,0)

Name(aaa,999,1)

 

2、*** 但是 *** 如果有persistcaches时,这个rdd的下游操作的是同一份原数据,并且后面的操作会受前面的影响

 

case class Name(var name: String, var age: Int, sex: Int)

object DateTest {

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

        val conf = new SparkConf().setAppName("test").setMaster("local[*]")

        val sc = new SparkContext(conf)

        Logger.getLogger("org").setLevel(Level.WARN)

        val data = List(Name("aaa", 1, 1), Name("bbb", 2, 0), Name("ccc", 3, 1))

        val r1 = sc.parallelize(data)

        r1.persist()

        r1.filter( r => {

            if (r.sex == 1) {

                r.name = ""

            }

            true

        }).foreach(println)

        println("--------------- ")

        r1.filter( r => {

            if (r.name.nonEmpty) {

                r.age = 999

                true

            } else false

        }).foreach(println)

    }

}

 

测试结果:

Name(,1,1)

Name(bbb,2,0)

Name(,3,1)

---------------

Name(bbb,999,0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值