Сначала о решениях, которые вы предложили:
решение2 :
Никогда не собирай rdd.
Если вы соберете rdd, это означает, что ваше решение не будет масштабируемым, или это означает, что вам не нужен rdd.
решение1 :
Аналогично ссылке на solution2, но с некоторыми исключениями, ваш случай не является одним из таких исключений.
Как уже упоминалось, "искровой" способ сделать это - использовать " join ".
Конечно, нет необходимости преобразовывать данные в фрейм искры.
Вот решение:
rdd1 = sc.parallelize([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)])
rdd2 = sc.parallelize([('aa', 1), ('bb', 2), ('cc', 3), ('dd', 4), ('ee', 5)])
rdd3 = sc.parallelize([(('a', 'aa'), 1), (('b', 'dd'), 8), (('e', 'aa'), 34), (('c', 'ab'), 23)])
print rdd3.map(lambda x: (x[0][0], (x[0][1], x[1])))\
.join(rdd1)\
.map(lambda x: (x[1][0][0], (x[0], x[1][0][1], x[1][1]))).join(rdd2)\
.filter(lambda x: x[1][0][1] > x[1][0][2] + x[1][1])\
.map(lambda x: ((x[1][0][0], x[0]), x[1][0][1]))\
.collect()
--> [(('b', 'dd'), 8), (('e', 'aa'), 34)]