Как удалить дублирующее значение seond в RDD [(Int, Int)] и сохранить одно из первых значений в Spark? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть СДР, как показано ниже:

val rdd1 = sc.parallelize(Array((1,2),(2,3),(4,5),(5,2),(4,3))) 

, то есть RDD[(Int,Int)] Я хочу удалить некоторое дублирующее значение на основе второго элемента в этом кортеже. Не имеет значения, какой первый элемент останетсяв результате единственное, что нужно - это удалить дублированное второе значение.
В этом примере результатом может быть:

(1,2)
(2,3)
(4,5)

или

(5,2)
(4,3)
(4,5)

или другое, посколькувторой элемент 2,3 дублирован. Однако результат должен содержать (4,5), поскольку в этом rdd он содержит только один 5 (второй элемент).

Итак, как мне поступить, чтобы получить это?Что-то вроде .unique () или reduByKey ()?Большое спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете преобразовать второе целое число в ключ и использовать reduByKey и переключить их обратно.Примерно так.

val rdd1 = ps.sparkSession.sparkContext.parallelize(Array((1,2),(2,3),(4,5),(5,2),(4,3)))
val rdd2 = rdd1.map(x => (x._2, x._1)).reduceByKey((x, y) => x).map(x => (x._2, x._1))

Результаты выглядят так:

rdd2.collect().foreach(println)
(2,3)
(4,5)
(1,2)

Надеюсь, это поможет.

...