2015-04-08 2 views
0

У меня есть список целых чисел:Как Карта Частичные элементы в Scala/Спарк

val mylist = List(1, 2, 3, 4) 

То, что я хочу сделать, это отобразить элемент, которые являются четными числами в MyList, и умножить их на 2.

Может быть, код должен быть:

mylist.map{ case x%2==2 => x*2 } 

Я ожидаю, что результат будет List (4, 8), но это не так. Каков правильный код?

Я знаю, что я мог бы реализовать эту функцию с помощью фильтра + карта

a.filter(_%2 == 0).map(_*2) 

но есть какой-то способ реализовать эту функцию, используя только карту()?

+1

Этот вопрос не имеет отношения к апаче-искрам. Почему тег? – maasg

+0

Я встречаюсь с той же проблемой в функции spark (s) map() функции RDD – user2848932

ответ

3

map не уменьшает количество элементов при трансформации. filter + map правильный подход.

Но если один метод необходимо использовать collect:

mylist.collect{ case x if x % 2 == 0 => 2 * x } 

Edit:

withFilter + map является более эффективным, чем filter + map (как withFilter не создает промежуточный сборник, т.е. работает лениво):

mylist.withFilter(_ % 2 == 0).map(_ * 2) 

, который такой же, как for:

for { e <- mylist if (e % 2 == 0) } yield 2 * e 
+0

'collect', вероятно, лучший выбор, но вы можете использовать' withFilter' для конвейера; или неявно использовать 'withFilter' через понимание. –

+0

Не могли бы вы привести пример кода aboutFilter? Спасибо :-) – user2848932

Смежные вопросы