Искра - разделитель не найден, как добавить разделитель в конце строки? - PullRequest
2 голосов
/ 18 апреля 2019

Я получаю сообщение об ошибке при копировании данных в Redshift.После просмотра таблицы stl_load_errors выяснилось, что причина в Delimiter not found.

. Я использую разделитель групп между столбцами данных и сохраняю данные в виде текстового файла:

val columns: Array[Column] = salesDF.columns.map(col)
val dataFrame = salesDF.select(concat_ws(String.valueOf(29.toChar), columns: _*)).write.text(outputLocation)

Полученные данные в файле выглядят так:

enter image description here

После сравнения с данными из файлов, которые успешно загружаются в Redshift, я подозреваюпроблема в том, что в самом конце нет разделителя.

Но разделитель уже передан concat_ws.И я не совсем понимаю, как этого добиться при сохранении данных, как указано выше?Другими словами, как я могу добавить один и тот же разделитель в конец каждой строки?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Попробуйте ниже:

val columns: Array[Column] = salesDF.columns.map(c => concat(col(c), typedLit(String.valueOf(29.toChar))))
val dataFrame = salesDF.select(concat(columns: _*)).write.text(outputLocation)
2 голосов
/ 18 апреля 2019

Функция concat_ws добавляет только разделитель между значениями, которые вы задаете.Чтобы добавить дополнительный разделитель в конце каждой строки, вы можете использовать функцию concat.

val sep = String.valueOf(29.toChar)
salesDF.select(concat(concat_ws(sep, columns: _*), lit(sep)))
...