Как добавить разделитель специальных символов в вывод csv фрейма данных spark и кодировку UTF-8-BOM

Я должен записать выходные данные фрейма данных искры в CSV-файл с разделителем "|^|". Я пытаюсь сделать так.

df.write.format("csv").option("delimiter", "\\|\\^\\|")

Но ошибка ниже

java.lang.IllegalArgumentException: неподдерживаемый специальный символ для разделителя: \|\^\|

Как добавить кодировку UTF-8-BOM в выходной файл, по умолчанию это UTF-8?

В java, если я добавлю «\ uFEFF» в начало файла, кодировка файла изменится на UTF-8-BOM. Теперь, как я могу добавить этот символ в spark csv?

Также, если я пойду с нижеприведенным подходом df.rdd.map(x=>x.mkString("|^|")).saveAsTextFile("dir path to store")

Как бы я разделил свои данные на основе столбца в фрейме данных?


person SUDARSHAN    schedule 04.10.2017    source источник
comment
Я не думаю, что spark-csv поддерживает многосимвольные разделители   -  person philantrovert    schedule 04.10.2017
comment
Почему вы хотите сохранить, используя символ |^|? spark-csv поддерживает только один символ. Почему бы вам не использовать стандартный csv или использовать только один символ? а затем, когда вы читаете файл, снова используйте этот разделитель. Ты не можешь сделать так?   -  person Ramesh Maharjan    schedule 05.10.2017
comment
Проблема в том, что |^| разделитель используется очень многими клиентами, если изменить здесь, все остальные должны внести изменения, что в моем случае невозможно.   -  person SUDARSHAN    schedule 05.10.2017
comment
@RameshMaharjan, если я использую этот df.rdd.map(x=›x.mkString(|^|)).saveAsTextFile(путь к каталогу для хранения), тогда все параметры, которые я получаю как csv, будут недоступны по умолчанию   -  person SUDARSHAN    schedule 05.10.2017
comment
then all option i am getting as csv will not be available by default что ты имеешь в виду?   -  person Ramesh Maharjan    schedule 05.10.2017
comment
Параметры @RameshMaharjan, такие как partitionBy(DataPartiotion,StatementTypeCode) .option(header, true) .option(codec, gzip) и есть ли шанс, что производительность приложения снизится?   -  person SUDARSHAN    schedule 05.10.2017
comment
нет, они не деградируют   -  person Ramesh Maharjan    schedule 05.10.2017
comment
@RameshMaharjan Есть идеи, как преобразовать это в формат UTF-8-BOM?   -  person SUDARSHAN    schedule 05.10.2017
comment
нет, я понятия не имею.   -  person Ramesh Maharjan    schedule 05.10.2017


Ответы (1)


просто поставь

 df.write.format("csv").option("delimiter","^").csv("dir path to store")

и для MULTI char вы можете использовать код ниже

 df.rdd.map(x=>x.mkString("|^|")).saveAsTextFile("dir path to store")
person Narendra Parmar    schedule 04.10.2017
comment
И как мы разделяем в этом решении - person SUDARSHAN; 05.10.2017
comment
в конце концов, все RDD, поэтому в этом сценарии производительность не повлияет - person Narendra Parmar; 05.10.2017
comment
Но как насчет раздела в этом случае - person SUDARSHAN; 05.10.2017
comment
На раздел это не повлияет, количество разделов останется прежним, если вам нужна дополнительная информация, вы можете уточнить свой вопрос. - person Narendra Parmar; 05.10.2017
comment
Я говорил, что если я выберу вариант файла saveAsText, как мне применить следующие параметры, такие как partitionBy(DataPartiotion,StatementTypeCode) .option(header, true) .option(codec, gzip) - person SUDARSHAN; 05.10.2017
comment
Привет, я обновил свой вопрос, не могли бы вы взглянуть - person SUDARSHAN; 06.10.2017
comment
Я добавил отдельный вопрос для лучшего понимания заголовка stackoverflow.com/questions/46599054/ - person SUDARSHAN; 06.10.2017
comment
С этим есть одна проблема. Где бы , ни находился в записях, я получаю " " в окончательном выводе csv... Я создал для этого отдельный вопрос stackoverflow.com/questions/47002414/ - person SUDARSHAN; 30.10.2017