Поток Akka: обработка CSV с заголовком

Чтение файлов CSV с использованием Akka Streams - на основе этого вопроса. У меня есть чтение CSV с использованием Akka Streams. Теперь мне нужно обработать его построчно, но мне также нужно знать, как назывались заголовки. Есть варианты?

УПД. Немного уточняю.

FileIO.fromPath(Paths.get("a.csv))
.via(Framing.delimiter(ByteString("\n"), 256, true).map(_.utf8String))
.runForeach(println /* header  + current line for each line*/)

person vvg    schedule 09.03.2017    source источник
comment
Разве заголовки не будут в первой строке вашего CSV? Не могли бы вы добавить более подробную информацию о конкретной проблеме, с которой вы столкнулись?   -  person Stefano Bonetti    schedule 09.03.2017
comment
добавил образец того, что мне нужно.   -  person vvg    schedule 09.03.2017


Ответы (2)


Вы можете использовать prefixAndTail, чтобы первый элемент - в данном случае заголовки - а затем лениво комбинируйте его с последующими элементами (строками).

Вот пример с заголовками и столбцами, объединенными в Map[String, String]:

val flow: Flow[Seq[String], Map[String, String], NotUsed] = Flow[Seq[String]]
  .prefixAndTail(1).flatMapConcat { case (headers, rows) =>
    rows.map (row => headers.head.zip(row).toMap)
  }

val test: Source[Seq[String], NotUsed] = Source(
  List(Seq("col1", "col2"), Seq("a", "b"), Seq("1", "2")))

Await.result(test.via(flow).runForeach(println), 20.seconds)
// Map(col1 -> a, col2 -> b)
// Map(col1 -> 1, col2 -> 2)
person Mikesname    schedule 09.03.2017