2016-02-24 3 views
1

У меня есть ключевое значение RDD, где ключи могут быть любыми между 1 и 5. Количество записей в RDD составляет миллионы. Мне нужно выводить RDD с 10 000 записей каждого ключа.Пример равного количества ключей в Spark 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 

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

1 a 
1 f 
2 c 
2 d 
3 c 
3 d 
+0

Я не понимаю, вы должны выяснить, что это, б, в ... и что ваша понравилась структура –

+0

Где вы бежите в проблему, делая это? Каков фактический результат, который вы получаете, чтобы сравнить с тем, что вы ожидаете? –

ответ

0

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

+0

reduceByKey - это не вариант. Набор данных очень велик, поэтому я беру образец. ReduceByKey, а затем принимать равные образцы занимает много времени. Хотя спасибо за ответ. – user2200660

1

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}) 
} 
Смежные вопросы