我有一个从HDFS文件生成的String SparkRDD(名为RDD1)。我还有一个字符串列表作为字典。我想在RDD1上应用map函数,这样对于每一行字符串,我在从字典构建的Lucene索引之上进行搜索,并返回每行的前三个匹配。我使用Lucene的TopScoreDocCollector来实现这一目标。我对单机版本没有任何问题,但是一旦我在集群上运行它报告:
ThrowableSerializationWrapper: Task exception could not be deserialized 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
答案 0 :(得分:0)
不幸的是,StandardAnalyzer
不是Serializable,因此无法将此类对象从驱动程序移动到执行程序。然而,可以绕过序列化问题在执行程序中实例化这样的对象。