akka流alpakka csv:跳过异常并解析下一行

时间:2018-11-29 16:16:29

标签: scala akka akka-stream alpakka

我正在使用Alpakka解析csv文件。版本“ com.lightbend.akka” %%“ akka-stream-alpakka-csv”%0.20 我有带封闭报价的csv文件。

email
test@emample.com
"test@emample.com
test@emample.com
test@emample.com

我想跳过不好的行然后继续,但是我的流正在下降。

我正在使用overviewStrategySupervision。恢复,但是不起作用。

找到未关闭的报价时流失败。

有什么办法可以解决这个问题?

我的代码:

implicit val system = ActorSystem("QuickStart")
implicit val materializer = ActorMaterializer()

def hdfsSource(csv: String): Source[ByteString, Future[IOResult]] =
  Source
    .single(csv)
    .map(ByteString.apply)
    .mapMaterializedValue(_ => Future.successful(IOResult(1, Success(Done))))

val csv = """email,country,name
            |"test,test,test
            |test,test,test
            |test,test,test
            |""".stripMargin

val source = hdfsSource(csv)

val decider: Supervision.Decider = {
  case _ ⇒ Supervision.Resume
}

val result = source
  .via(CsvParsing.lineScanner())
  .via(CsvToMap.toMapAsStrings())
  .withAttributes(ActorAttributes.supervisionStrategy(decider))
  .runForeach(println)

1 个答案:

答案 0 :(得分:0)

当前zip 3.0不支持监督策略。您可以选择其他符号作为行扫描器CsvParsing.lineScanner()的引号字符。然后,您将获得未封闭的双引号作为解析结果的一部分:

CsvParsing.lineScanner(quoteChar = '\'')