HYL 積分 3

做成 one-off 比較好啊,在 Scala Stream 是 lazy memorization collection ,我們最近一個月就踩到了兩次問題,造成 OutOfMemoryError

val stream = (1 to 10000).toStream  
   .map(id => dao.find(id))  // 1
   .flatMap(_.getOptionalInt) // 2
   .filter(_ < 10) // 3
   .foldLeft(0)((ret, a) => ret + a)

這看起來是把一萬個 object ,取出其中的一個 Int 參數,過濾掉小於 10 的數值,再一個個取出來相加,並不會造成太大的的計憶體負擔,但實際上卻生成了 1, 2, 3 個各有一萬個 object 的 Stream

一不小心,就丟 OutOfMemoryError 了

這是文章的子討論串,你可以回到上層查看所有討論和文章
IngramChen 積分 0

中間都會自己做一份 copy 啊,scala 這樣子,怎麼會適用在 big data 上呢? (spark...)

還是 spark 裡的 scala stream 重新寫過了?

HYL 積分 1

Spark 不知道,但是 scoobi (scala framework for Hadoop) 就是自己重做了一份。

scalaz 也弄了自己的 EphemeralStream