2015-12-10 3 views
1

У меня есть String SparkRDD (с именем RDD1), сгенерированный из файла HDFS. И у меня также есть список String в качестве словаря. Я хочу применить функцию отображения на RDD1, чтобы для каждой строки строки я выполнял поиск поверх индекса Lucene, построенного из словаря, и возвращал тройку совпадений для каждой строки. Для этого я использую TopScoreDocCollector от Lucene. У меня нет никаких проблем с одной версией машины, но когда я запускаю его на кластере он сообщает:Сериализация Lucene StandardAnalyzer для преобразования карты Apache Spark RDD

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

В вашем обычном банке проверьте, что вы используете ту же версию lucene -? - 5.3.1.jar. – Kaushal

ответ

0

К сожалению, StandardAnalyzer не Сериализуемый и, следовательно, не могут перемещаться такие объекты от водителя к исполнителю. Тем не менее, возможно создание таких объектов у исполнителей в обход проблемы сериализации.