Не удается выполнить запись в CSV с заголовком с помощью Spark Scala

#scala #apache-spark

#scala #apache-spark

Вопрос:

У меня никогда раньше не было этой проблемы, но по какой-то причине, когда я записываю фрейм данных в CSV в spark scala, выходной CSV-файл имеет совершенно неправильный формат. 1, в нем нет строки заголовка, и 2, между столбцами есть случайные большие пробелы.

Но самое смешное, когда я делаю df.показать в IDE, он выводит абсолютно нормально с заголовком и в правильном формате.

Я использую очень простой, универсальный метод записи в csv,

 df.write.csv("output.csv")

  

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

Ответ №1:

Вам не хватает какой-то опции :

  • sep (по умолчанию , ): устанавливает один символ в качестве разделителя для каждого поля и значения.
  • quote (по умолчанию " ): задает один символ, используемый для экранирования значений в кавычках, где разделитель может быть частью значения. Если установлена пустая строка, она использует u0000 (нулевой символ).
  • escape (по умолчанию ): задает один символ, используемый для экранирования кавычек внутри уже заключенного в кавычки значения.
  • charToEscapeQuoteEscaping (по умолчанию escape или ): задает один символ, используемый для экранирования escape для символа кавычки. Значением по умолчанию является escape-символ, если escape-символы и символы кавычек разные, в противном случае .
  • escapeQuotes (по умолчанию true ): флаг, указывающий, должны ли значения, содержащие кавычки, всегда заключаться в кавычки. По умолчанию экранируются все значения, содержащие символ кавычки.
  • quoteAll (по умолчанию false ): флаг, указывающий, должны ли все значения всегда заключаться в кавычки. По умолчанию используются только экранирующие значения, содержащие символ кавычки.
  • header (по умолчанию false ): записывает имена столбцов в качестве первой строки.
  • nullValue (по умолчанию empty string ): задает строковое представление нулевого значения.
  • compression (по умолчанию null ): кодек сжатия для использования при сохранении в файл. Это может быть одно из известных сокращенных имен без учета регистра (none, bzip2, gzip, lz4, snappy и deflate).
  • dateFormat (по умолчанию yyyy-MM-dd) : задает строку, указывающую формат даты. Пользовательские форматы даты соответствуют форматам в java.text.SimpleDateFormat. Это относится к типу даты.
  • timestampFormat (по умолчанию yyyy-MM-dd'T'HH:mm:ss.SSSXXX) : задает строку, указывающую формат метки времени. Пользовательские форматы даты соответствуют форматам в java.text.SimpleDateFormat. Это относится к типу метки времени.
  • ignoreLeadingWhiteSpace (по умолчанию true )`: флаг, указывающий, следует ли пропускать начальные пробелы в записываемых значениях.
  • ignoreTrailingWhiteSpace (по умолчанию true ): флаг, указывающий, определяет, следует ли пропускать конечные пробелы из записываемых значений.

В вашем случае :

 df.write.option("header","true").csv("output.csv")