首页 > 解决方案 > 如何使用 akka 流 alpakka 编写带有标题的 CSV 文件?

问题描述

我看不到找到它,因此我转向 slack 询问:有没有办法使用 akka stream alpakka 编写一个带有其声音的 csv 文件?

我唯一看到的是https://doc.akka.io/docs/alpakka/current/data-transformations/csv.html#csv-formatting

但是没有对 csv 的反向操作以某种方式映射。

我的用例是我需要读取几个 csv 文件,过滤它们的内容,并将干净的内容写入相应的文件 orginalcsvfilename-cleanded.csv。

如果不直接支持,有什么建议吗?

标签: csvakka-streamalpakka

解决方案


你可以做这样的事情

def csv_header(elem:T):List[String] = ???
def csv_line(elem:T):List[String] = ???

def firstTrueIterator(): Iterator[Boolean] = (Iterator single true) ++ (Iterator continually false)

def firstTrueSource: Source[Boolean, _] = Source fromIterator firstTrueIterator

def processData(elem: T, firstRun: Boolean): List[List[String]] = {
      if (firstRun) {
        List(
          csv_header(elem),
          csv_line(elem)
        )
      } else {
        List(csv_line(elem))
      }
    }

val finalSource = source
  .zipWith(firstTrueSource)(processData)
  .mapConcat(identity)
  .via(CsvFormatting.format()) 

推荐阅读