我是靠谱客的博主 虚幻灯泡,最近开发中收集的这篇文章主要介绍Caused by: java.io.NotSerializableException: org.apache.spark.SparkContext,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
当你执行各种转换(map,flatMap,filter等等)的时候,会有以下转换:
1、在driver节点上序列化,
2、上传到合适的集群中的节点,
3、在节点上执行反序列化,
4、最后在节点上执行。
当然你也可以在本地运行,除了没有网络传输,其他的过程都一样的,这样的好处就是方便调试在你部署之前。
在这个例子中,你在class Test1中定义了一个方法,并运用在了map中,Spark知道不能序列化这个方法,于是试图序列化整个类,因此才能使得这个方法能运行在其他JVM之上,正因为本例没有序列化,所以才出现异常。
要解决这个问题可以有以下两种方法:
1. 在val sc = spark.sparkContext 上面加
@transient
2. .map(这里面写成一个函数出来) -- 因为scala里函数就是对象
@transient val sc = spark.sparkContext val sqlContext = spark.sqlContext val medlineRaw = loadMedline(sc, "file:/home/raini/音乐/medline_data_test") val mxml: RDD[Elem] = medlineRaw.map(XML.loadString) // 得到: Array[scala.xml.Elem] = val medline: RDD[Seq[String]] = mxml.map(majorTopics).cache()
3. 类继承序列化类
object RunGraph extends Serializable {
上面是对类内的适用方法:
在spark-shell里不适用
反而是把map函数放在map里执行才可以
//val medline: RDD[Seq[String]] = mxml.map(majorTopics).cache() val medline = mxml.map{elem: Elem => val dn = elem \ "DescriptorName" val mt = dn.filter(n => (n "@MajorTopicYN").text == "Y") mt.map(n => n.text) }.cache()
最后
以上就是虚幻灯泡为你收集整理的Caused by: java.io.NotSerializableException: org.apache.spark.SparkContext的全部内容,希望文章能够帮你解决Caused by: java.io.NotSerializableException: org.apache.spark.SparkContext所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复