строка .flatMap (WordsUtil :: getWords) является ошибкой - неверный тип возврата в ссылке на метод: cannot convert java.util.List<java.lang.String> to java.util.Iterator<U>
return lines.map(String::toLowerCase)
.flatMap(WordsUtil::getWords)
.mapToPair(w -> new Tuple2<>(w, 1))
.reduceByKey((a, b) -> a + b)
.mapToPair(Tuple2::swap)
.sortByKey(false).map(Tuple2::_2).take(topX);
Кодовый метод:
public static List<String> getWords(String line) {
List<String> words = new ArrayList<>();
BreakIterator breakIterator = BreakIterator.getWordInstance();
breakIterator.setText(line);
int lastIndex = breakIterator.first();
while (BreakIterator.DONE != lastIndex) {
int firstIndex = lastIndex;
lastIndex = breakIterator.next();
if (lastIndex != BreakIterator.DONE && Character.isLetterOrDigit(line.charAt(firstIndex))) {
words.add(line.substring(firstIndex, lastIndex));
}
}
return words;
}
почему у меня эта ошибка?
я вижу List <String>, хорошо, но почему это правильно? github.com/Jeka1978/spark-training-kiev-2016/blob/master/src /…
Скорее всего, потому что код, с которым вы связались, использует старую версию Spark, где тип возврата был Iterable (который является List), а не Iterator. См. spark.apache.org/docs/1.6.3/api/java/org/apache/spark/api/ja va /…
да (в примере с использованием spark-core_2.10, и я использую версию 2.3.2 (
@Alexandr пример, на который вы указываете, использует Spark 1.6.1. См. github.com/Jeka1978/spark-training-kiev-2016/blob/master/…




Функция плоской карты должна возвращать итератор:
.flatMap(w -> WordsUtil.getWords(w).iterator())
но почему это правильно? github.com/Jeka1978/spark-training-kiev-2016/blob/master/src /…
Прочтите сообщение об ошибке:
Bad return type in method reference: cannot convert java.util.List<java.lang.String> to java.util.Iterator<U>. Итак, что должен вернуть указанный метод (WordsUtil :: getWords)? Что это возвращает?