Когда я запускаю свою работу MapReduce, я сохраняю текущую метку времени как объект Date
в статической переменной моего основного класса.
Позже, когда я хочу прочитать значение из другого класса (например, моего пользовательского класса каскадного фильтра или каскадной функции), задание вылетает с ошибкой java.lang.NullPointerException
в соответствии с Driven.
Нельзя ли получить доступ к статической переменной в каскадной логике? Я понятия не имею, почему это не работает. Переменная Date
определенно не равна нулю, поскольку я вывожу ее на консоль при запуске задания, а затем никакая логика не затрагивает ее.
Это класс, который выдает ошибку. Если я создаю новый Date
(с текущим временем) в методе opera(), все работает нормально.
public class TimestampAppender extends BaseOperation implements Function {
public TimestampAppender(Fields fieldDeclaration) {
super(Fields.ARGS);
}
public void operate(FlowProcess flowProcess, FunctionCall functionCall) {
TupleEntry argument = functionCall.getArguments();
Date timestamp = Main.timeFrameMiddle;
String arg0 = argument.getString(0);
String arg1 = argument.getString(1);
Tuple result = new Tuple();
result.addString(arg0);
result.addString(arg1);
result.addLong(timestamp.getTime());
functionCall.getOutputCollector().add(result);
}
}