2016-12-09 2 views
2

У меня есть несколько пар Cw (Integer я, Струнный слово) я число вхождений слова в текстовом файле.Spark: Как RDD.map/mapToPair работа с Java

Я хотел бы просто иметь для каждой пары новую пару c1 (Integer i, 1) с 1 фиксированным числом.

Кажется, это действительно тривиально, но я не понял, как работают функции map/mapToPair.

JavaPairRDD<Integer, Integer> c1 = cw.map(??? -> new Tuple2<Integer, Integer>(??, 1)); 

Я работаю с использованием Java-8.

ответ

3

Если я правильно вас понимаю, у вас есть ниже JavaPairRDD.

JavaPairRDD<Integer, String> cw = ...; 

Теперь вы хотите создать ниже JavaPairRDD, где второе значение 1.

JavaPairRDD<Integer, Integer> c1; 

Для того, чтобы получить это, во-первых, вы должны извлечь из JavaRDD cw JavaPairRDD и для этого вам нужно будет позвонить map функция, как показано ниже. Мы выберем первое значение из пары.

JavaRDD<Integer> cw1 = cw.map(tuple -> tuple._1()); 

Теперь вы будете создавать новый JavaPairRDD из JavaRDD с помощью mapToPair функции, как показано ниже.

JavaPairRDD<Integer, Integer> c1 = cw1.mapToPair(i -> new Tuple2<Integer, Integer>(i, 1)); 

В одной строке вы можете написать его как

JavaPairRDD<Integer, Integer> c1 = cw.map(tuple -> tuple._1()).mapToPair(i -> new Tuple2<Integer, Integer>(i, 1)); 
0

Simply ... cw.mapValues(v -> 1);

С АНИ Документами JavaPairRDD.mapValues() ...

Pass каждое значение пара значений ключа-значения RDD через функцию карты без изменения ключей; это также сохраняет исходное разделение RDD .

Смежные вопросы