序列化
序列化就是指将一个对象转化为二进制的byte流(注意,不是bit流),然后以文件的方式进行保存或通过网络传输,等待被反序列化读取出来。序列化常被用于数据存取和通信过程中。
Spark是分布式执行引擎,其核心抽象是弹性分布式数据集RDD,其代表了分布在不同节点的数据。
Spark的计算是在executor上分布式执行的,故用户开发的关于RDD的操作(闭包)有如下执行过程:
1. 代码中对象在driver本地序列化
2. 对象序列化后传输到远程executor节点
3. 远程executor节点反序列化对象
4. 最终远程节点执行
故对象在执行中需要序列化通过网络传输,则必须经过序列化过程。
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object serRDD {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setAppName("My scala word count").setMaster("local")
val sc = new SparkContext(conf)
val rdd: RDD[String] = sc.makeRDD(List("hadoop","python","java"))
val search = new Search("h")
val rdd1: RDD[String] = search.getMatch1(rdd)
rdd1.collect().foreach(println)
val rdd2: RDD[String] = search.getMatch2(rdd)
rdd2.collect().foreach(println)
}
}
class Search(query:String) extends java.io.Serializable{
//过滤出包含字符串的数据
def isMatch(s:String):Boolean={
s.contains(query)
}
//过滤出包含字符串的RDD
def getMatch1(rdd:RDD[String]):RDD[String]={
rdd.filter(isMatch)
}
def getMatch2(rdd:RDD[String]):RDD[String]={
rdd.filter(x=>x.contains(query))
}
}
posted on 2020-09-24 14:26 happygril3 阅读(171) 评论(0) 收藏 举报
浙公网安备 33010602011771号