Ошибка компиляции при вызове updateStateByKey
Ошибка компиляции:
The method updateStateByKey(Function2<List<Integer>,Optional<S>,Optional<S>>) in the type JavaPairDStream<String,Integer> is not applicable for the arguments (Function2<List<Integer>,Optional<Integer>,Optional<Integer>>)
В простом примере подсчета слов, отображение слов с 1
JavaPairDStream<String, Integer> wordCounts = words.mapToPair(s -> new Tuple2<>(s,1));
А затем применяя updateStateByKey
на wordCounts
JavaPairDStream<String, Integer> finalcount = wordCounts.updateStateByKey(updateFunction);
updateFunction
определяется следующим образом:
final Function2<List<Integer>, Optional<Integer>, Optional<Integer>> updateFunction =
new Function2<List<Integer>, Optional<Integer>, Optional<Integer>>() {
@Override
public Optional<Integer> call(List<Integer> values, Optional<Integer> state) {
Integer newSum = state.orElse(0);
for (Integer value : values) {
newSum += value;
}
return Optional.of(newSum);
}
};
Для updateStateByKey доступны следующие рекомендуемые подписи:
1 ответ
Пожалуйста, проверьте, какой пакет вы импортируете для использования Необязательно. Spark использовать com.google.common.base.Optional не JDK по умолчанию пакет java.util.Optional.