当前位置:网站首页>06 Spark on RDD序列化问题
06 Spark on RDD序列化问题
2022-08-08 23:31:00 【YaPengLi.】
闭包检查
从计算的角度, 算子以外的代码都是在 Driver 端执行, 算子里面的代码都是在 Executor]端执行。那么在 scala 的函数式编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给 Executor端执行,就会发生错误,所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测。Scala2.12 版本后闭包编译方式发生了改变。
序列化方法和属性
从计算的角度, 算子以外的代码都是在 Driver 端执行 val user = new User(100);, 算子里面的代码都是在 Executor端执行。
异常案例
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* @author YaPeng Li
* @version 0.0.1
* @description: TODO
* @date 2021/12/28 8:34 下午
*/
object SerErrorCase {
def main(args: Array[String]): Unit = {
val cf: SparkConf = new SparkConf().setAppName("SerCase").setMaster("local[*]")
val sc = new SparkContext(cf)
val value: RDD[Int] = sc.makeRDD(List(1, 1, 1, 1))
val user = new User(100);
val value1: RDD[Int] = value.map(num => {
num + user.age
})
value1.collect().foreach(println)
}
class User(num: Integer) {
val age = 2 + num
}
}
成功案例
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* @author YaPeng Li
* @version 0.0.1
* @description: TODO
* @date 2021/12/28 8:14 下午
*/
object SerCase {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setAppName("SerCase").setMaster("local[*]")
val sc = new SparkContext(conf)
val value: RDD[Int] = sc.makeRDD(List(1, 1, 1, 1))
val user = new User(100);
val value1: RDD[Int] = value.map(num => {
num + user.age
})
value1.collect().foreach(println)
}
class User(num: Integer) extends Serializable {
val age = 2 + num
}
}
边栏推荐
猜你喜欢
STM8L LCD digital tube driver, thermometer LCD display
Kubernetes 实现 CI/CD 发布流程
WeChat applet error undefined Expecting 'STRING','NUMBER','NULL','TRUE','FALSE','{','[', got ]Solution
(2022杭电多校四)1011-Link is as bear(思维+线性基)
iptables firewall content full solution
51nod 1706 最短路 + 思维
(2022牛客多校四)H-Wall Builder II(思维)
MySQL 原理与优化,Group By 优化 技巧
LightningChart .NET 10.3.2 Crack 支持旧项目直接升级
微信小程序 wx:for 循环输出 例子
随机推荐
51nod 2877熟练使用tarjan的知识
(2022牛客多校四)H-Wall Builder II(思维)
力扣每日一题-第50天-383. 赎金信
循环神经网络实现股票预测
牛客练习赛88 D 克鲁斯卡尔重构树
[GYCTF2020]Ezsqli-1|SQL注入
WeChat applet error undefined Expecting 'STRING','NUMBER','NULL','TRUE','FALSE','{','[', got ]Solution
[PP-YOLOv2] Training a custom dataset
Kubernetes web网站无法访问
二叉树 层次遍历 及例题
最小生成树prim 求得 树上两点之间的最大最小值
makefile 自动编译 目录和子目录的 C文件
Golang gorm 数据库连接,迁移,索引
如何使用 Eolink 实现 API 文档自动生成
Kubernetes 实现 CI/CD 发布流程
神经网络学习笔记(1)
(2022牛客多校四)N-Particle Arts(思维)
待完善:tf.name_scope() 和 tf.variable_scope()的区别
线性筛求积性函数
(2022牛客多校五)H-Cutting Papers(签到)