Общая функциональность функции карты в Spark - PullRequest
0 голосов
/ 06 мая 2018

Я изучаю Spark с базовыми знаниями Java.

В моей первой программе Spark я увидел код, который выглядит следующим образом:

JavaRDD<String> tweetsRDD = spContext.textFile("/home/andrea/Documents/SparkTest");
for (String s : tweetsRDD.take(5)) {
    System.out.println(s);
}           
System.out.println("Total tweets in file : " + tweetsRDD.count());
JavaRDD<String> ucRDD = tweetsRDD.map(str -> str.toUpperCase());

// Print upper case lines
for (String s : ucRDD.take(5)) {
    System.out.println(s);
}

Я не понимаю, что означает str -> str.toUpperCase() в функции карты.

После поиска в Google я обнаружил, что map - это функция, объявленная в интерфейсе JavaRDDLike<T, This extends JavaRDDLike<T, This>>.

Сигнатура функции: map(Function<T, R> f)

Могу ли я узнать, пожалуйста, как Function<T, R> и str -> str.toUpperCase() связаны друг с другом как параметр в функции карты?

Я не могу понять эту функцию str -> str.toUpperCase()! Как это выглядит Function<T, R>?

Мой второй вопрос касается интерфейса JavaRDDLike. Я видел, как один из типов аргументов сказал This extends JavaRDDLike<T,This>? Что это значит? Это указывает на класс, реализующий этот интерфейс?

1 Ответ

0 голосов
/ 07 мая 2018

Выражение (str -> str.toUpperCase()) называется Лямбда-выражением .

Это анонимные методы (методы без имен), используемые для реализации метода, определенного функциональным интерфейсом. Функциональный интерфейс имеет один-единственный абстрактный метод.

Lambda обеспечивает возможность выполнения операций конвейера с данными, а также дает вам возможность многоядерной обработки.

Оператор -> называется оператором стрелки. Он делит лямбда-выражение на две части.

В левой части указаны параметры, требуемые выражением, которые также могут быть пустыми, если параметры не требуются.

n -> n*n

Правая сторона - это лямбда-тело, которое определяет действия лямбда-выражения. Может быть полезно думать об этом операторе как о «становится». Например, «n становится n * n» или «n становится n в квадрате».

Подробнее из документации

https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...