2015-12-10 56 views
1

我有一個從HDFS文件生成的String SparkRDD(名爲RDD1)。我還有一個String作爲字典的列表。我想在RDD1上應用一個map函數,這樣對於每一行字符串,我都會搜索一個由字典構建的Lucene索引,然後返回每行的前三個匹配項。我使用Lucene的TopScoreDocCollector來實現這一點。我有一個單機版本沒有問題,但一旦我在集羣中運行它,它報道:用於Apache Spark RDD映射轉換的序列化Lucene StandardAnalyzer

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

我的程序邏輯是首先創建從字典廣播變量(字符串列表)。然後在地圖功能中。我從該廣播變量構建一個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

在你自定義jar中檢查你使用的是相同版本的lucene - ? - 5.3.1.jar。 – Kaushal

回答

0

不幸的是,StandardAnalyzer無法序列化,因此不能從驅動器到執行移動這樣的對象。不過,可以在執行程序中實例化這些對象,繞過序列化問題。

相關問題