如何读取大数据流并比较计数?

时间:2018-12-25 20:37:20

标签: scala akka akka-stream

我有一个流正在读取这样的数据:

navigation.navigate('Linkscreen')

我需要读取第一行,在这种情况下,获取整数(5),然后对剩余的行进行计数,并找出(navigation('Linkscreen'))计数是否匹配。在这种情况下5与4不匹配,因此它将为id | color | shade | 5 1 | red | light 2 | green | dark 3 | blue | light 4 | grey | light

我现在正在执行此操作,该操作可以在某些数据上正常工作,但开始出错,并在大型流(超过1M条记录)上给我OOM。这就是我在做的

true/false

问题

是否有一种方法可以提高上述代码的效率,使其适用于超过100万条记录?

1 个答案:

答案 0 :(得分:0)

最有效的方法是不将restResult收集为Seq[ColorLine],而是仅产生一些色线作为结果:

type Count = Long

val zeroCount : Count = 0L

val countColorLine : (Count, ColorLine) => Count = 
  (count, _) => count + 1

val restResultCount: Future[Count] =
  myRawStr(ctx)
    .drop(1)
    .via(framing("\n"))
    .map(_.utf8String)
    .map(_.trim)
    .map(s => ColorLineParser(s))
    .collect {
      case Right(color) => color
    }
    .runFold(zeroCount)(countColorLine)