Почему Spark не сохраняет исходный формат отметки времени при записи набора данных в файл или hdfs - PullRequest
0 голосов
/ 17 июня 2020

Хотите записать набор данных 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

...