2014-10-24 2 views
2

Предположим, что у меня есть RDD, заданный путем распараллеливания списка пар ключ-значение [(1, 4), (2, 3), (1, 1), (1, 0), (2,0)], и я хочу удалить кортежи с одним и тем же ключом на основе их значения (поэтому для кортежей с одним и тем же ключом остается только тот, который имеет самое низкое значение). Поэтому я хочу применить преобразование таким образом, что RDD представляется в конце ((1,0), (2,0)] в конце (я не забочусь о том, чтобы заказать здесь, пока удалены правильные копии). В настоящее время, что я делаю звонитУдаление дубликатов ключей по значению в искровом разряде

RDD = RDD.map(lambda (x, y): (y, x)).sortByKey().map(lambda (x, y): (y, x)).reduceByKey(lambda x, y: x) 

Первые три преобразований позволяют мне сортировать по значению и последние просто удаляет дубликаты ключей (так как мои кортежи упорядочены по значению Теперь кортеж копий с наименьшим пребывания значения в такте) , Это прекрасно работает, но я чувствую, что это определенно преувеличивает ситуацию и приводит к завышенной производительности. Кто-нибудь знает, как это упростить? Помощь будет очень признательна! Благодарю.

+2

'rdd.reduceByKey (Math.min (_, _))' слишком просто для ответа – aaronman

+0

Ничего себе, это так просто. Спасибо! – Leeren

+0

@aaronman +1 - Могли бы поставить это на ответ, чтобы вопрос мог быть отмечен как принятый ?. – maasg

ответ

2

Довольно просто, в основном rdd.reduceByKey(Math.min(_,_)) - Это для Скале

В питоне я предполагаю, что это будет
rdd.reduceByKey(lambda (x,y) : min(x,y))

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