Java 序列化用于Apache Spark RDD映射转换的Lucene StandardAnalyzer

Java 序列化用于Apache Spark RDD映射转换的Lucene StandardAnalyzer,java,serialization,apache-spark,lucene,Java,Serialization,Apache Spark,Lucene,我有一个从HDFS文件生成的字符串SparkRDD(名为RDD1)。我还有一个字符串列表作为字典。我想在RDD1上应用一个映射函数,这样对于每一行字符串,我都会在从字典构建的Lucene索引上进行搜索,并返回每一行的前三个匹配项。我正在使用Lucene的TopCoreDocCollector来实现这一点。我对单机版没有问题,但在群集上运行后,它会报告: ThrowableSerializationWrapper:无法反序列化任务异常java.lang.ClassNotFoundExceptio

我有一个从HDFS文件生成的字符串SparkRDD(名为RDD1)。我还有一个字符串列表作为字典。我想在RDD1上应用一个映射函数,这样对于每一行字符串,我都会在从字典构建的Lucene索引上进行搜索,并返回每一行的前三个匹配项。我正在使用Lucene的TopCoreDocCollector来实现这一点。我对单机版没有问题,但在群集上运行后,它会报告:


ThrowableSerializationWrapper:无法反序列化任务异常java.lang.ClassNotFoundException:org.apache.lucene.queryparser.classic.ParseException

我的程序逻辑是首先从字典(字符串列表)创建广播变量。然后在map函数中。我用那个广播变量建立了一个Lucene索引。我相信错误发生在我打电话时:

StandardAnalyzer analyzer = new StandardAnalyzer();
我相信这不是因为忘记添加Lucene罐造成的。我正在使用下面的程序来运行它

spark-submit --class jinxuanw.clairvoyant.App --jars lucene-analyzers-common-5.3.1.jar,lucene-core-5.3.1.jar,lucene-queryparser-5.3.1.jar jobtitlematch-1.0.jar 

不幸的是,
StandardAnalyzer
不可序列化,因此无法将此类对象从驱动程序移动到执行器。不过,可以绕过序列化问题在执行器中实例化此类对象。

在自定义jar中,检查您使用的是相同版本的lucene-?-5.3.1.jar。