序列化就是指将一个对象转化为二进制的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)) } }
标签:String,val,rdd,RDD,序列化,def 来源: https://www.cnblogs.com/hapyygril/p/13723889.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。