Образец равного количества ключей в Spark RDD

У меня есть ключевое значение RDD, где ключи могут быть любыми между 1 и 5. Количество записей в RDD исчисляется миллионами. Мне нужно вывести RDD с 10 000 записей каждого ключа.

Пример RDD [(String, String)] для 3 разных ключей:

1 a
2 b
3 b
2 c
1 d
2 e
2 f
2 c
1 d
3 e
2 f

Если мне нужны две любые 2 записи каждого ключа, вывод может быть:

1 a
1 f
2 c
2 d
3 c
3 d

person user2200660    schedule 24.02.2016    source источник
comment
Я не понимаю, что вы должны уточнить, что такое a, b, c... и какая вам нравится структура   -  person Alberto Bonsanto    schedule 25.02.2016
comment
Где вы сталкиваетесь с проблемой при этом? Каков фактический результат, который вы получаете, чтобы сравнить с тем, что вы ожидаете?   -  person Nathaniel Ford    schedule 27.02.2016


Ответы (2)


sampleByKeyExact должно помочь:

def sampleByKeyUniform[T: ClassTag, U: ClassTag](
    rdd: RDD[(T, U)], n: Long, withReplacement: Boolean = false) = {
  rdd.sampleByKeyExact(withReplacement,
    rdd.countByKey.map{case (k, v) => k -> n.toDouble / v})
}
person zero323    schedule 24.02.2016

вам нужно использовать reduceByKey на вашем RDD, чтобы подсчитать, сколько раз каждый появляется, а затем использовать filter, чтобы получить только те, у кого count > 10000

person Sebastian Piu    schedule 24.02.2016
comment
уменьшитьByKey не вариант. Набор данных очень большой, поэтому я беру образец. ReduceByKey, а затем получение равных выборок занимает много времени. Хотя спасибо за ответ. - person user2200660; 26.02.2016