В основном вам необходимо понимать разницу, когда нужно изменять SerDe, а когда - формат файла.
Из официальной документации: Hive SerDe
Что такое SerDe?
1.SerDe - это короткое название для «Сериализатора и Десериализатора».
2.Hive использует SerDe (и FileFormat) для чтения и записи строк таблицы.
3.HDFS файлы -> InputFileFormat -> -> Десериализатор -> Объект строки
4.Row объект -> Сериализатор -> -> OutputFileFormat -> HDFS файлы
Итак, 3-й и 4-й пункты явно выводят разницу.
Вам нужно иметь пользовательский формат файла (ввод / вывод), когда вы хотите прочитать запись не так, как обычно (где записи разделены '\ n').
И вам нужно настроить SerDe, когда вы хотите интерпретировать прочитанные записи по-своему.
Давайте рассмотрим пример широко используемого формата JSON.
Сценарий 1:
Допустим, у вас есть входной файл json, в котором одна строка содержит одну запись json.
Итак, теперь вам просто нужен Custom Serde для интерпретации прочитанной записи так, как вы хотите.
Нет необходимости настраивать входной формат, поскольку в 1 строке будет 1 запись.
Сценарий 2:
Теперь, если у вас есть входной файл, где ваша одна запись JSON охватывает несколько строк, и вы хотите прочитать его как есть, то
сначала вы должны написать собственный формат ввода для чтения в 1 записи json, а затем эта прочитанная запись json перейдет в Custom SerDe.