Ответ 1
Есть несколько вариантов:
rdd.flatMap
: rdd.flatMap
сгладит коллекцию Traversable
в RDD. Чтобы выбрать элементы, вы обычно возвращаете Option
в результате преобразования.
rdd.flatMap(elem => if (filter(elem)) Some(f(elem)) else None)
rdd.collect(pf: PartialFunction)
позволяет предоставить частичную функцию, которая может фильтровать и преобразовывать элементы из исходного RDD. Вы можете использовать весь способ сопоставления шаблонов с этим методом.
rdd.collect{case t if (cond(t)) => f(t)}
rdd.collect{case t:GivenType => f(t)}
Как говорит Дин Уэмплер в комментариях, rdd.map(f(_)).filter(cond(_))
может быть таким же хорошим и даже более быстрым, чем другие более "тонкие" варианты, упомянутые выше.
Где f
- функция преобразования (или отображения).