Спарк-код для объединения слов, начинающихся с одной буквы.

У нас есть пример данных слов, разделенных пробелом. Мы преобразуем его в JavaPairRDD ‹Character, String›

SparkSession sparkSession = SparkSession.builder().appName("combineByKey").getOrCreate();
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkSession.sparkContext());
List<String> data = Arrays.asList("bat", "mat", "hat", "rat", "cat", "ball", "mud", "hut");
JavaPairRDD<Character,String> distData = javaSparkContext.parallelize(data).mapToPair(t -> new Tuple2<>(t.charAt(0), t));

Теперь данные представлены следующим образом:

<b, bat>
<m, mat>
<h, hat>
.....
.....
<h, hut>

Теперь мы будем использовать CombineByKey для агрегирования первого символа.

Function<String, List<String>> createCombiner = data -> {
List<String> list = new ArrayList<>();
list.add(data);
return list;
};
Function2<List<String>, String, List<String>> mergeValue = (list, data) -> {
list.add(data);
return list;
};
Function2<List<String>, List<String>, List<String>> mergeCombiners = (v1, v2) -> {
v1.addAll(v2);
return v1;
};

Теперь используйте вышеуказанные функции, чтобы получить окончательный ответ.

JavaPairRDD<Character, List<String>> response = distData.combineByKey(createCombiner, mergeValue, mergeCombiners);

Окончательный ответ

b , [bat, ball]
h , [hat, hut]
r , [rat]
m , [mat, mud]
c , [cat]