我刚学会了如何将整数列表转换为scala中每个bin频率的映射。
How to convert list of integers to a map with frequency per bin in scala
但是我正在使用22 GB的文件,因此我正在通过该文件进行流式传输。
Source.fromFile("test.txt").getLines.filter(x => x.charAt(0) != '#').map(x => x.split("\t")(1)).map(x => x.toInt)
groupby函数仅适用于列表,而不适用于迭代器。我猜是因为它需要内存中的所有值。由于文件大小,我无法将迭代器转换为列表。
所以一个例子是
List(1,2,3,101,330,302).iterator
我怎么能从那里去
res1: scala.collection.immutable.Map[Int,Int] = Map(100 -> 1, 300 -> 2, 0 -> 3)
答案 0 :(得分:3)
您可以使用折叠:
val iter = List(1,2,3,101,330,302).iterator
iter.foldLeft(Map[Int, Int]()) {(accum, a) =>
val key = a/100 * 100;
accum + (key -> (accum.getOrElse(key, 0) + 1))}
// scala.collection.immutable.Map[Int,Int] = Map(0 -> 3, 100 -> 1, 300 - 2)