美文网首页程序员
spark引用外部全局变量序列化

spark引用外部全局变量序列化

作者: 飞叔Brother | 来源:发表于2018-06-22 18:25 被阅读286次

同学们使用spark的时候,难免会使用一些外部全局变量。

就比如我们在使用map算子的时候,没忍住使用了外部全局变量。而我们任务执行时是需要将该对象分布式传送到各个节点上去的,因为数据就分布式存储在各个节点上嘛。我们这里的传送可不是传送门,而是走网络的。所以传送前我们得将对象序列化。到达相应机器上后再反序列化。

但是总有一些东西很皮,没有实现序列化接口。就比如我刚刚遇到的Rabbitmq的channel,Connection还有有些数据库的链接。

你引用的外部变量不能序列化,你的任务就不能序列化。就会出现“org.apache.spark.SparkException: Task not serializable”这个错误。

不能序列化,那干脆就不要传送了,让他在各个节点使用吧。foreachPartition了解一下?

foreachPartition:循环每个分区,在每个分区使用变量,分区不跨节点,不需要序列化。

这样搞然后就哦了!

我们也可以把数据collect拉回到driver端操作,但是这样数据量大会导致内存溢出的,不建议使用。

有图有真相

当然,如果足够任性,我们也可以在循环RDD内的每行记录时使用。

以上所述如有不妥,恳请大家指正。

(如果对您有所帮助话,那就点个赞点个关注吧,嘻嘻~~)

安利一个特别热心的编程乐园群:624108656

超级热心的群

相关文章

网友评论

    本文标题:spark引用外部全局变量序列化

    本文链接:https://www.haomeiwen.com/subject/iqxlyftx.html