【问题标题】:Serialize Lucene StandardAnalyzer for Apache Spark RDD map transformation为 Apache Spark RDD 映射转换序列化 Lucene StandardAnalyzer
【发布时间】:2016-03-16 11:20:53
【问题描述】:

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

ThrowableSerializationWrapper: Task exception could not be deserialized java.lang.ClassNotFoundException: org.apache.lucene.queryparser.classic.ParseException

我的程序逻辑是首先从字典中创建一个广播变量(一个字符串列表)。然后在地图功能中。我从该广播变量构建了一个 Lucene 索引。我相信当我打电话时会发生错误:

StandardAnalyzer analyzer = new StandardAnalyzer();

我相信这不是由于忘记添加 Lucene jars 造成的。我正在使用以下程序来运行它。

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 

【问题讨论】:

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

标签: java serialization apache-spark lucene


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2018-04-08
    • 2019-06-13
    • 2014-09-13
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多