Хотите записать набор данных Spark, содержащий несколько столбцов временных меток, в hdfs.
- При чтении по умолчанию Spark выводит данные как метку времени, если формат похож на "гггг-ММ-дд ЧЧ : mm: ss ".
- Но при записи в файл сохраняет в формате " yyyy-MM-dd'T'HH: mm: ss.SSSXXX "
- Например, для исходных данных 2020-06-01 12: 10: 03 записывается как 2020-06-01T12: 10: 03.000 + 05: 30 .
Почему Spark не сохраняет исходный формат метки времени при записи набора данных в файл или hdfs?
Используя простой код java, например:
Dataset<Row> ds = spark.read().format("csv").option("path",the_path).option("inferSchema","true").load();
ds.write().format("csv").save("path_to_save");
Я знаю обходной путь :
- Перед сохранением используйте параметр «timestampFormat».
- Но могут иметь место накладные расходы на производительность, а также глобальные для всех столбцов.
- Итак, допустим, есть 2 столбца с форматы «гггг-ММ-дд ЧЧ: мм: сс» и «гггг-ММ-дд ЧЧ» . Оба могут быть выведены как временная метка по умолчанию, но выводятся в единственном указанном "timestampFormat".
- Другой способ - использовать
date_format(col, format)
. Но это также может иметь накладные расходы на производительность и включать в себя операции, которые необходимо применить, тогда как я ожидаю, что Spark сохранит исходный формат
Пробовал с spark2.3 и spark2.4