Я просто обнаружил метод RDD.zip(), и я не могу представить, что его contract может быть.
Я понимаю, что он делает, конечно. Тем не менее, я всегда понимал, что
- порядок элементов в RDD - это бессмысленное понятие
- количество разделов и их размеры - это деталь реализации, доступная только пользователю для настройки производительности.
Другими словами, RDD является (мульти) набором, а не последовательностью (и, конечно, в, например, Python получает AttributeError: 'set' object has no attribute 'zip')
Что не так с моим пониманием выше?
В чем причина этого метода?
Является ли это законным за пределами тривиального контекста, например a.map(f).zip(a)?
ИЗМЕНИТЬ 1:
- Другим сумасшедшим методом является
zipWithIndex(), а также различныеzipPartitions(). - Обратите внимание, что
first()иtake()не сумасшедшие, потому что они являются просто (неслучайными) образцами RDD. -
collect()тоже хорошо - он просто преобразуетsetвsequence, который совершенно прав.
EDIT 2: ответ говорит:
когда вы вычисляете один RDD из другого, порядок элементов в новом RDD может не соответствовать порядку в старом.
Это означает, что даже тривиальный a.map(f).zip(a) не гарантированно эквивалентен a.map(x => (f(x),x)). Какова ситуация, когда результаты zip() воспроизводятся?