2015-04-08 44 views
0

我有一個整數列表:如何在斯卡拉地圖局部構件/星火

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

此問題與apache-spark沒有關係。爲什麼標籤? – maasg

+0

我在RDD – user2848932

回答

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 { e <- mylist if (e % 2 == 0) } yield 2 * e 
+0

'collect'的spark函數map()中遇到了同樣的問題'collect'可能是最好的選擇,但是你可以使用'withFilter'來管道;或通過理解來隱含地使用'withFilter'。 –

+0

你能給一個關於withFilter的代碼示例嗎?謝謝 :-) – user2848932