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.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)