当前位置:网站首页>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
}
}
边栏推荐
- 机器学习之知识点(一)
- 【Pytorch】学习笔记(一)
- Hand-written prometheus exporter-01-Gauge (dashboard)
- MySQL indexes a field in a table
- 【Bug解决】ValueError: Object arrays cannot be loaded when allow_pickle=False
- 【瑞吉外卖】day04:员工分页查询、启用/禁用员工账号、编辑员工信息
- (2022杭电多校三)1002-Boss Rush(状压DP+二分)
- 如何使用 Eolink 实现 API 文档自动生成
- postgresql源码学习(35)—— 检查点⑤-检查点中的XLog清理机制
- Learning experience of bp neural network
猜你喜欢
随机推荐
(2022牛客多校四)K-NIO‘s Sword(思维)
机器学习建模高级用法!构建企业级AI建模流水线
Small program figure display banner
微信小程序 wx:for 循环输出 例子
STM8L LCD digital tube driver, thermometer LCD display
WeChat applet error undefined Expecting 'STRING','NUMBER','NULL','TRUE','FALSE','{','[', got ]Solution
MES对接Simba实现展讯平台 IMEI 写号与耦合测试
2022牛客多校六 B-Eezie and Pie (dfs)
Excel 2013 下拉为“快速分拆”调整为“填充序号”
使用Mongoose populate实现多表关联存储与查询,内附完整代码
不躺平,然后做到极致,就是最大的“安全感”
iptables firewall content full solution
stm32 利用 串口接收空闲中断 + dma 实现不定长度dma 接收
(2022牛客多校四)N-Particle Arts(思维)
域前置通信过程和溯源思路
(Codeforce 757)E. Bash Plays with Functions(积性函数)
(2022杭电多校六)1012-Loop(单调栈+思维)
(newcoder 15079)无关(容斥原理)
2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-1绿色围栏(模拟)
Free ARP