Я просто обнаружил метод 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()
воспроизводятся?