编写spark streaming 程序时遇到org.apache.spark.SparkException: Task not serializable错误,翻译为task没有序列化,经排查,是因为在executor端执行的函数内容中,try catch 的finally代码块里调用了stremingcontext的stop方法;
这里觉得奇怪是因为正常在finally里面调用ssc.stop()并不会报错,是因为之前都是将数据收集到Driver端后进行处理的,在Driver端调用.foreachRDD方法执行函数,这时调用ssc.stop()就不会存在闭包问题;
另外,executor端运行函数逻辑连接Redis数据库插入数据时,是不用try catch的,这个try catch 是我自己加上去的,以后不用try catch 的代码块不要加 try catch, 共勉;
org.apache.spark.SparkException: Task not serializable
最新推荐文章于 2021-04-25 12:41:05 发布