我正在从远程位置(ftp)读取CSV文件,并且文件的列数无效。
在文件中遇到此类行时,Steam没有进行。我需要跳过它们并显示错误消息,然后继续。
这是我尝试过的,监督策略不起作用。
source.via(CsvParsing.lineScanner().withAttributes(ActorAttributes.supervisionStrategy(throwable-> Supervision.resume()))
我需要跳过无效行并显示错误消息,然后继续。
样本数据:我的Csv每行有5个字段。
1281,Export - Product Search Tags,0,Id,20
1282,Export - Product Search Tags,1,Id,10
1283,Export - Product Search Tags,2,Value,100
如果我删除第二行中的最后一个字段(即10)。然后,流将失败,它将不会读取下一行。
答案 0 :(得分:2)
CsvParsing似乎不支持Actor监督。
这是数据的结构方式,请参见docs:
Field Delimiter - separates the columns from each other (e.g. , or ;)
Quote - marks columns that may contain other structuring characters (such as Field Delimiters or line break) (e.g. ")
Escape Character - used to escape Field Delimiters in columns (e.g. \)
Lines are separated by either Line Feed (\n = ASCII 10) or Carriage Return and Line Feed (\r = ASCII 13 + \n = ASCII 10).
在这种情况下,我们预计流在以下情况下会因 MalformedCsvException 而失败,请参阅内部的 CsvParser.scala类
1. Wrong escaping
2. No line end after the delimiter or when maximum line end is reached
3. No delimiter or end of line when quote end is reached
4. Unclosed quote
请检查在删除列时没有违反任何条件的情况,并添加流失败的错误以使问题更具描述性。