Spark core 记录-persist原数据操作

Spark core 记录-persist原数据操作

      • 1、在同一个rdd上,做不同转换的操作时,并不会改变这个rdd上的值,也不会影响其他rdd上使用原数据的结果
      • 测试结果:
      • 2、`但是` 如果有persist或caches时,这个rdd的下游操作的是同一份原数据,并且后面的操作会受前面的影响
      • 测试结果:

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、但是 如果有persist或caches时,这个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)

你可能感兴趣的:(spark)