1. 程式人生 > >spark core 記錄-persist對元資料的操作的影響

spark core 記錄-persist對元資料的操作的影響

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)