У меня есть программа spark scala, которая загружает банку, которую я написал на java. Из этого jar вызывается статическая функция, которая пытается прочитать сериализованный объект из файла (Pattern.class
), но выдает ошибку java.lang.ClassNotFoundException
. Локальный запуск программы spark работает, а на рабочих кластерах — нет. Это особенно странно, потому что, прежде чем я попытаюсь прочитать из файла, я создаю экземпляр объекта Pattern
, и проблем не возникает.
Я уверен, что объекты Pattern
, которые я записал в файл, совпадают с объектами Pattern
, которые я пытаюсь прочитать.
Я проверил банку на подчиненной машине, и там есть класс Pattern
.
Кто-нибудь знает, в чем может быть проблема? Я могу добавить больше деталей, если это необходимо.
Это класс Pattern
public class Pattern implements Serializable {
private static final long serialVersionUID = 588249593084959064L;
public static enum RelationPatternType {NONE, LEFT, RIGHT, BOTH};
RelationPatternType type;
String entity;
String pattern;
List<Token> tokens;
Relation relation = null;
public Pattern(RelationPatternType type, String entity, List<Token> tokens, Relation relation) {
this.type = type;
this.entity = entity;
this.tokens = tokens;
this.relation = relation;
if (this.tokens != null)
this.pattern = StringUtils.join(" ", this.tokens.toString());
}
}
Я читаю файл с S3 следующим образом:
AmazonS3 s3Client = new AmazonS3Client(credentials);
S3Object confidentPatternsObject = s3Client.getObject(new GetObjectRequest("xxx","confidentPatterns"));
objectData = confidentPatternsObject.getObjectContent();
ois = new ObjectInputStream(objectData);
confidentPatterns = (Map<Pattern, Tuple2<Integer, Integer>>) ois.readObject();
ЛЭ: Я проверил путь к классам во время выполнения, и пути к банке там не было. Я добавил его для исполнителей, но у меня все еще та же проблема. Я не думаю, что это было так, поскольку у меня есть класс Pattern внутри jar, который вызывает функцию readObject.