Po uruchomieniu zadania MapReduce zapisuję bieżący znacznik czasu jako Date
obiekt w zmiennej statycznej mojej głównej klasy.
Później, gdy chcę odczytać wartość z innej klasy (takiej jak mój niestandardowy filtr kaskadowy lub klasa funkcji kaskadowej), zadanie ulega awarii z java.lang.NullPointerException
według Driven.
Czy nie można uzyskać dostępu do zmiennej statycznej w logice kaskadowej? Nie mam pojęcia, dlaczego to nie działa Date
zmienna zdecydowanie nie ma wartości zerowej, ponieważ drukuję ją na konsolę, gdy zadanie jest uruchamiane, a następnie nie jest dotykana przez żadną logikę.
To klasa, która generuje błąd. Jeśli utworzę nowy Date
(z bieżącym czasem) w metodzie operacyjnej () wszystko działa dobrze.
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);
}
}
Odpowiedzi:
0 dla odpowiedzi № 1nie jest jasne, co do Main.timeFrameMiddle. Czy możesz również dołączyć klasę główną. Jeśli próbujesz uzyskać aktualny czas, możesz to zrobić w ramach funkcji kaskadowej.