(1)闭包检测如果算子里面的代码访问了算子外面的代码,那么一定会将算子外的代码传输到算子内执行,那么一定会产生闭包。如果这个外面的数据是对象,那么一定要做序列化,因为这个数据需要在网络中传输。如果闭包使用的变量不能序列化,那么根本就不会执行作业,不会走到RunJob()闭包形成的情况:1、匿名函数用到了外部的变量或者对象,就形成了闭包2、scala中的类传入参数,参数会在这个类的内部形成变量供自己使用所以下面Text在网络中传输的话也需要做序列化 class Text(aaa :String
摘要由CSDN通过智能技术生成
(1)闭包检测
如果算子里面的代码访问了算子外面的代码,那么一定会将算子外的代码传输到算子内执行,那么一定会产生闭包。如果
这个外面的数据是对象,那么一定要做序列化,因为这个数据需要在网络中传输。
如果闭包使用的变量不能序列化,那么根本就不会执行作业,不会走到RunJob()
闭包形成的情况:
1、匿名函数用到了外部的变量或者对象,就形成了闭包
2、scala中的类传入参数,参数会在这个类的内部形成变量供自己使用
所以下面Text在网络中传输的话也需要做序列化
class Text(aaa :String){
def bbb(): Unit ={
println(aaa)
}
}
示例:
packagesparkcore.bibaoimportorg.apache.spark.rdd.RDD
importorg.apache.spark.{
SparkConf, SparkContext}object Spark_RDD_Operate_Action {
def main(args: Array[String]):Unit={
val conf: SparkConf =new SparkConf().setMaster("local[*]").setAppName("bibao")val sc =new SparkContext(conf)val user =new User
// 情况一: Task not serializable// val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4,5),2)
(1)闭包检测如果算子里面的代码访问了算子外面的代码,那么一定会将算子外的代码传输到算子内执行,那么一定会产生闭包。如果这个外面的数据是对象,那么一定要做序列化,因为这个数据需要在网络中传输。如果闭包使用的变量不能序列化,那么根本就不会执行作业,不会走到RunJob()闭包形成的情况:1、匿名函数用到了外部的变量或者对象,就形成了闭包2、scala中的类传入参数,参数会在这个类的内部形成变量供自己使用所以下面Text在网络中传输的话也需要做序列化 class Text(aaa :String