Получение com.univocity.parsers.common.TextParsingException при загрузке файла CSV - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь присоединить набор данных tsv, который имеет много новых строк в данных, к другому фрейму данных и продолжает получать

com.univocity.parsers.common.TextParsingException

Я уже очистил свои данные, чтобы заменить \ N на NA, поскольку я думал, что это может быть причиной, но безуспешно.

Ошибка указывает на следующую запись в ошибочных данных

tt0100054 2 Повелитель мух SUHH ru NA NA 0

Трассировка стека выглядит следующим образом

    19/03/02 17:45:42 ERROR Executor: Exception in task 0.0 in stage 10.0 (TID 10)
com.univocity.parsers.common.TextParsingException: Length of parsed input (1000001) exceeds the maximum number of characters defined in your parser settings (1000000). 
Identified line separator characters in the parsed content. This may be the cause of the error. The line separator in your parser settings is set to '\n'. Parsed content:
    Sesso e il poliziotto sposato   IT  NA  NA  NA  0[\n]
    tt0097089   4   Sex and the Married Detective   US  NA  NA  NA  0[\n]`tt0100054 1   Fluenes herre   NO  NA  imdbDisplay NA  0
tt0100054   20  Kärpästen herra FI  NA  NA  NA  0
tt0100054   2
    at com.univocity.parsers.common.AbstractParser.handleException(AbstractParser.java:302)
    at com.univocity.parsers.common.AbstractParser.parseNext(AbstractParser.java:431)
    at org.apache.spark.sql.execution.datasources.csv.BulkCsvReader.next(CSVParser.scala:148)
    at org.apache.spark.sql.execution.datasources.csv.BulkCsvReader.next(CSVParser.scala:131)
    at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
    at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
    at org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:91)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:370)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:246)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:240)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
    at org.apache.spark.scheduler.Task.run(Task.scala:86)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1000000
    at com.univocity.parsers.common.input.AbstractCharInputReader.appendUtilAnyEscape(AbstractCharInputReader.java:331)
    at com.univocity.parsers.csv.CsvParser.parseQuotedValue(CsvParser.java:246)
    at com.univocity.parsers.csv.CsvParser.parseRecord(CsvParser.java:119)
    at com.univocity.parsers.common.AbstractParser.parseNext(AbstractParser.java:400)
    ... 22 more

Я уже пытался установить следующее вcsv option ("maxCharsPerCol", "110000000") .option ("multiLine", "true"), это не помогает.Буду признателен за помощь в устранении этого.

Я использую spark 2.0.2 и scala 2.11.8.

1 Ответ

0 голосов
/ 04 марта 2019

Автор univocity-parsers здесь.

Парсер был создан для быстрого сбоя, когда что-то потенциально неправильно с вашей программой (т. Е. Формат файла был настроен неправильно) или с входным файлом (т. Е. С входными данными).файл не соответствует формату, ожидаемому вашей программой, или содержит неэкранированные / незамкнутые кавычки).

Трассировка стека показывает это:

Sesso e il poliziotto sposato   IT  NA  NA  NA  0[\n]
tt0097089   4   Sex and the Married Detective   US  NA  NA  NA  0[\n]`tt0100054 1   Fluenes herre   NO  NA  imdbDisplay NA  0
tt0100054   20  Kärpästen herra FI  NA  NA  NA  0
tt0100054   2

, который четко показывает содержимое нескольких строк, которые читаютсякак будто они были частью единого значения.Это означает, что где-то рядом с этим текстом во входном файле есть значения, начинающиеся с кавычки, которая никогда не закрывается.

Вы можете настроить синтаксический анализатор так, чтобы он не пытался обрабатывать кавычки со следующими значениями:

settings.getFormat().setQuote('\0');

Если вы уверены, что ваша конфигурация формата правильная и во входных данных есть очень длинные значения, установите maxCharsPerColumn на -1.

Наконец, похоже, что вы анализируете TSV, чтоне CSV и должен обрабатываться по-другому.В этом случае вы также можете попробовать использовать TsvParser.

Надеюсь, это поможет

...