2016-11-17 6 views
2

Я пытаюсь создать исследование когорты для отслеживания в приложении поведения пользователя, и я хочу спросить, если у вас есть какие-либо идеи о том, как я могу исключить элемент из РДА 2, который находится в РДЕ 1. Дано:Как получить разницу между двумя RDD в PySpark?

rdd1 = sc.parallelize([("a", "xoxo"), ("b", 4)]) 

rdd2 = sc.parallelize([("a", (2, "6play")), ("c", "bobo")]) 

для Exemple, чтобы иметь общий элемент между rdd1 и rdd2, мы должны просто сделать:

rdd1.join(rdd2).map(lambda (key, (values1, values2)) : (key, values2)).collect() 

Что дает:

[('a', (2, '6play'))] 

Таким образом, это объединение будет п ind общий элемент между rdd1 и rdd2 и взять ключ и значения только из rdd2. Я хочу сделать обратное: найти элементы, которые находятся в rdd2, а не в rdd1, и взять ключ и значения только из rdd2. Другими словами, я хочу получить элементы из rdd2, которых нет в rdd1. Таким образом, ожидаемый результат:

("c", "bobo") 

Идеи? Спасибо :)

+0

Что версия Спарк? –

ответ

7

Я только что получил ответ, и это очень просто!

rdd2.subtractByKey(rdd1).collect() 

Наслаждайтесь :)