#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
или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")