如何在Scala / Spark中映射部分元素

时间:2015-04-08 03:02:37

标签: scala apache-spark

我有一个整数列表:

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

我想要做的是在mylist中映射偶数的元素,并将它们乘以2.

也许代码应该是:

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

我希望结果是List(4,8),但事实并非如此。什么是正确的代码?

我知道我可以通过使用filter + map

来实现这个功能
a.filter(_%2 == 0).map(_*2)

但是有没有办法只使用map()来实现这个功能?

1 个答案:

答案 0 :(得分:3)

map不会减少转换中的元素数量。 filter + map是正确的做法。

但如果需要单一方法,请使用collect

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

修改

withFilter + mapfilter + map效率更高(因为withFilter不会创建中间集合,即它工作懒惰):

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

for相同:

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