Priority Queue Serialization Error ,在spark中引入第三方linkedInAttic的scanns jar包,在运行时报Queue Serialization Error,笔者使用gradle做的项目编辑工具,具体的jar包引入可以参考上一篇文章
scala version -- compile 'org.scala-lang:scala-library:2.11.8' spark ml version -- compileOnly 'org.apache.spark:spark-mllib_2.11:2.3.0'
1、错误提示
org.apache.spark.SparkException: Job aborted due to stage failure: Task 946.0 in stage 16.0 (TID 1971) had a not serializable result: scala.collection.mutable.PriorityQueue$$anon$3 Serialization stack: - object not serializable (class: scala.collection.mutable.PriorityQueue$$anon$3, value: non-empty iterator)
2、项目依然打开的issues:
LInkedInAttic 其实是linked公司已经不再维护更新的项目,但是很多项目在特定的应用场景下有其独有的价值的,可以说是一个宝库。
https://github.com/LinkedInAttic/scanns/issues/3
3、解决方案
目前笔者验证过的可行解决方案有两个
1、升级scala和spark版本, 在open的issues最后边有对应的提示(如下图)
2、修改scanns源码,从新编译jar包

修改源码的方案涉及到的文件主要就一个scala文件scanns/src/main/scala/com/linkedin/nn/model/LSHNearestNeighborSearchModel.scala

