我是靠谱客的博主 虚幻灯泡,最近开发中收集的这篇文章主要介绍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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部