Ошибка компиляции при вызове 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.

Другие вопросы по тегам