Spark Univocity 解析器 - LineSeparatorDetection 不工作
Spark Univocity parser - LineSeparatorDetection not working
我正在尝试使用具有以下选项的 univocity csv 解析器解析 this csv 文件
选项:
HEADER -> true
DELIMITERS -> ,
MULTILINE -> true
DEFAULT_TIME_STAMP -> yyyy/MM/dd HH:mm:ss ZZ
IGNORE_TRAILING_WHITE_SPACE -> false
IGNORE_LEADING_WHITE_SPACE -> false
TIME_ZONE -> Asia/Kolkata
COLUMN_PRUNING -> true
ESCAPE -> "\""
val csvOptionsObject = new CSVOptions(readerOptions, COLUMN_PRUNING , TIME_ZONE)
val parserInstance = csvOptionsObject.asParserSettings
parserInstance.setLineSeparatorDetectionEnabled(true)
val parserObject = new CsvParser(parserInstance)
val readerStream = parserObject.beginParsing(dataObj.getInputStream, csvOptionsObject.charset)
val row = parserObject.parseNext()
该文件有 30 列,但当我解析它时显示为 2302 行。
该文件使用 \r 作为行分隔符。 (正如我在解析时看到的那样)
将行分隔符明确设置为 \r 解决了这个问题。
但我也会有以 \n 作为分隔符的文件被替换为 \r。
要解决此设置,setNormalizedLineEndingWithinQuotes(false)
解决了 ,但在引用所有值的其他文件中失败。(再次无法检测到分隔符)。
任何可能的解决方法?
默认使用 spark CSVOptions 中的 asParserSettings 将 inputBufferSize 更改为 128(spark 中的默认值),而 univocity csv 解析器中的默认值为 1048576。
添加这段代码解决了问题,
val csvOptionsObject = new CSVOptions(readerOptions, COLUMN_PRUNING , TIME_ZONE)
val parserInstance = csvOptionsObject.asParserSettings
parserInstance.setLineSeparatorDetectionEnabled(true)
parserInstance.setInputBufferSize(1048576) // Setting it to match univocity parser's default value
val parserObject = new CsvParser(parserInstance)
val readerStream = parserObject.beginParsing(dataObj.getInputStream, csvOptionsObject.charset)
val row = parserObject.parseNext()
我正在尝试使用具有以下选项的 univocity csv 解析器解析 this csv 文件
选项:
HEADER -> true
DELIMITERS -> ,
MULTILINE -> true
DEFAULT_TIME_STAMP -> yyyy/MM/dd HH:mm:ss ZZ
IGNORE_TRAILING_WHITE_SPACE -> false
IGNORE_LEADING_WHITE_SPACE -> false
TIME_ZONE -> Asia/Kolkata
COLUMN_PRUNING -> true
ESCAPE -> "\""
val csvOptionsObject = new CSVOptions(readerOptions, COLUMN_PRUNING , TIME_ZONE)
val parserInstance = csvOptionsObject.asParserSettings
parserInstance.setLineSeparatorDetectionEnabled(true)
val parserObject = new CsvParser(parserInstance)
val readerStream = parserObject.beginParsing(dataObj.getInputStream, csvOptionsObject.charset)
val row = parserObject.parseNext()
该文件有 30 列,但当我解析它时显示为 2302 行。
该文件使用 \r 作为行分隔符。 (正如我在解析时看到的那样)
将行分隔符明确设置为 \r 解决了这个问题。
但我也会有以 \n 作为分隔符的文件被替换为 \r。
要解决此设置,setNormalizedLineEndingWithinQuotes(false)
解决了 ,但在引用所有值的其他文件中失败。(再次无法检测到分隔符)。
任何可能的解决方法?
默认使用 spark CSVOptions 中的 asParserSettings 将 inputBufferSize 更改为 128(spark 中的默认值),而 univocity csv 解析器中的默认值为 1048576。
添加这段代码解决了问题,
val csvOptionsObject = new CSVOptions(readerOptions, COLUMN_PRUNING , TIME_ZONE)
val parserInstance = csvOptionsObject.asParserSettings
parserInstance.setLineSeparatorDetectionEnabled(true)
parserInstance.setInputBufferSize(1048576) // Setting it to match univocity parser's default value
val parserObject = new CsvParser(parserInstance)
val readerStream = parserObject.beginParsing(dataObj.getInputStream, csvOptionsObject.charset)
val row = parserObject.parseNext()