RDD имеет смысл (в отличие от некоторого случайного порядка, заданного моделью хранения), если он был обработан sortBy()
, как описано в этом ответе.
Теперь, какие операции сохранить упорядочены?
Например, гарантировано, что (после a.sortBy()
)
a.map(f).zip(a) ===
a.map(x => (f(x),x))
Как насчет
a.filter(f).map(g) ===
a.map(x => (x,g(x))).filter(f(_._1)).map(_._2)
как насчет
a.filter(f).flatMap(g) ===
a.flatMap(x => g(x).map((x,_))).filter(f(_._1)).map(_._2)
Здесь "равенство" ===
понимается как "функциональная эквивалентность", то есть нет способа отличить результат с использованием операций на уровне пользователя (то есть без чтения журналов и с).