SparkStreaming中foreachRDD、foreachPartition和foreach 及序列化问题
最近项目遇到报错序列化相关问题,于是把这三个拿出来分析一下,先来看下foreachRDD、foreachPartition和foreach的不同之处。
不同主要在于它们的作用范围不同,foreachRDD作用于DStream中每一个时间间隔的RDD,foreachPartition作用于每一个时间间隔的RDD中的每一个partition,foreach作用于每一个时间间隔的RDD中的每一个元素。
而在执行上也有区分,foreachRdd运行在driver节点,foreachPartition和foreach运行在work节点,这点需要注意,也就是说,如果在worker上用driver上的东西,就有可能报序列化错误问题,例如foreachRDD向外部系统输出数据时,通常要创建一个连接对象,如果像上面的代码中创建在driver上就是错误的,因为foreach在每个节点上执行时节点上并没有连接对象。通常会报序列化错误或者初始化错误。
dstream.foreachRDD { rdd =>
val connection = createNewConnection()
rdd.foreach { record =>

connection.send(record) // executed at the worker}
}
正确代码应为
dstream.foreachRDD { rdd =>
rdd.foreachPartition { partitionOfRecords =>
val connection = createNewConnection()partitionOfRecords.foreach(record => connection.send(record))connection.close()}
}
所以driver与worker之间通信必须要经过序列化,然后并不是所用对象都能被序列化,所以报序列化的问题基本都是这个问题。
-
08.04
无限暖暖风与叶的重逢如何做
-
08.04
无限暖暖金蔷薇套装如何做
-
08.04
《无限暖暖》2.5版本 万灵的归途 活动开启提醒
-
08.04
无限暖暖千纸鹤起飞设计图获取做法
-
08.04
无限暖暖2.2版本新区域 万相境特色游玩体验有什么
-
08.04
无限暖暖2.5版本「万灵的归途」版本服装赠礼说明
推荐专题
热门阅读
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏