Spark считывает CSV с возвратом каретки, за которым следует новая строка в текстовом поле

#scala #csv #apache-spark #newline

#scala #csv #apache-spark #новая строка

Вопрос:

Я пытаюсь прочитать csv в Spark с помощью Scala.

Одно из текстовых полей может содержать возврат каретки (c), за которым следует перевод новой строки (n). Конец соответствующей строки также помечается таким же образом, возврат каретки сопровождается переводом строки. Вы уже можете представить, что происходит, когда вышеупомянутое текстовое поле также содержит их. Это происходит время от времени, но когда это происходит, функция чтения интерпретирует их как начало новой строки в файле и генерирует раздражающий сдвиг столбца плюс несколько дополнительных строк, содержащих некоторую часть этого текстового поля.

Я прочитал много тем с проблемами, похожими на мои. Я перепробовал большинство решений, но ничего не работает. На данный момент я использую следующий код для чтения CSV, однако он вызывает раздражающий сдвиг:

 val df1 = (spark.read
.option("delimiter", "¦")
.option("header",true)
.option("encoding", "ISO-8859-1")
.option("header", "true")
.option("inferSchema", "true")
.csv(s3Location))
  

Мне нужна кодировка, потому что, если я прочитаю файл без нее, разделитель полей (который есть ¦ ) не отображается должным образом. Я пытался .option("multiline", "true") экранировать символы, но ничего не работает.

Единственное решение, которое мне удалось создать, — удалить эти строки с помощью .option("mode", "DROPMALFORMED") . Однако это кажется довольно радикальным, поскольку они могут содержать полезную информацию.