Spark coreレコード-persist元データ操作
16142 ワード
Spark coreレコード-persist元データ操作1、同一のrdd上で異なる変換の操作を行う場合、このrdd上の値は変更されず、他のrdd上で元のデータを使用する結果 にも影響しない.試験結果: 2,`ただしpersistまたはcachesがある場合、このrddの下流では同じ元のデータが動作し、後の動作は前の影響 を受ける.試験結果: 1、同一のrdd上で、異なる変換の操作を行う場合、このrdd上の値は変更されず、他のrdd上で元のデータを使用した結果にも影響しない
テスト結果:
2、
テスト結果:
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)