#r #parquet #apache-arrow
Вопрос:
Предположим, у меня есть data.frame/tibble, как показано ниже:
library(readr)
library(arrow)
# testFyl was originally read from a csv file with readr::read_csv()
testFyl <- structure(list(
BILL_NO = c("36/2015-16", "39/15-16", "771", "254", "731", "610", "200", "23 /2015-16", "21/2015-16", "30/15-16"),
BILL_DT_TIME = structure(c(1438021800, 1436898600, 1438021800, 1436293800, 1437935400, 1437589800, 1436207400, 1438108200, 1437676200, 1437330600), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
BILL_DT = structure(c(16643, 16630, 16643, 16623, 16642, 16638, 16622, 16644, 16639, 16635), class = "Date")),
spec = structure(list(cols = list(BILL_NO = structure(list(), class = c("collector_character", "collector")), BILL_DT_TIME = structure(list(format = ""), class = c("collector_datetime", "collector")), BILL_DT = structure(list(format = ""), class = c("collector_date", "collector"))), default = structure(list(), class = c("collector_guess", "collector")), delim = ","), class = "col_spec"), row.names = c(NA, -10L), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))
Тестовый файл выглядит так:
# A tibble: 10 x 3
BILL_NO BILL_DT_TIME BILL_DT
<chr> <dttm> <date>
1 36/2015-16 2015-07-27 18:30:00 2015-07-27
2 39/15-16 2015-07-14 18:30:00 2015-07-14
3 771 2015-07-27 18:30:00 2015-07-27
4 254 2015-07-07 18:30:00 2015-07-07
5 731 2015-07-26 18:30:00 2015-07-26
6 610 2015-07-22 18:30:00 2015-07-22
7 200 2015-07-06 18:30:00 2015-07-06
8 23 /2015-16 2015-07-28 18:30:00 2015-07-28
9 21/2015-16 2015-07-23 18:30:00 2015-07-23
10 30/15-16 2015-07-19 18:30:00 2015-07-19
Обратите внимание, что столбец BILL_DT содержит те же даты, что и столбец BILL_DT_TIME, с удаленной информацией о времени.
Теперь запишите эту таблицу в parquet
формате с
write_parquet(testFyl, "testFyl.parquet")
При чтении этого parquet
файла обратно в R с
read_parquet("testFyl.parquet")
все абсолютно нормально. Таблица точно такая же, как и выше, как и ожидалось.
Однако, когда я загружаю этот файл паркета с помощью следующих двух внешних инструментов просмотра файлов паркета, они отображают даты в форматах, которые я не понимаю:
1. Паркетвьюер из https://github.com/mukunku/ParquetViewer
Здесь в столбце BILL_DT_TIME показаны цифры, которые мне кажутся странными.
2. Средство просмотра файлов Bigdata с https://github.com/Eugene-Mark/bigdata-file-viewer
Здесь в столбцах BILL_D_TIME, а также BILL_DT отображаются числа, которые я не понимаю. Эти числа отображаются при data.frame
сохранении с dput
помощью функции.
Видя date-time
(странные) и date
(понятные) столбцы в ParquetViewer, кажется, что можно выполнить некоторое форматирование date-time
столбца в среде R перед его экспортом в parquet
формате, чтобы он правильно отображался в ParquetViewer. Кто-нибудь может помочь мне разобраться в этом?
Редактировать: Тем временем я поднял проблему (запрос функций) на github по адресу https://github.com/mukunku/ParquetViewer/issues/40
Edit2: Разработчик любезно обновил ParquetViewer, чтобы отображать метки времени в понятном для человека формате. Таким образом, этот вопрос решен.
Ответ №1:
Этот формат называется «метка времени». Это временная метка Unix, выраженная в микросекундах.
https://www.epochconverter.com/
https://github.com/apache/parquet-format/blob/master/LogicalTypes.md
Текущие приложения для просмотра графического интерфейса для этих форматов довольно ограничены.
Комментарии:
1. Тот факт, что R сохраняет временные метки в виде количества секунд с 01-01-1970, вылетел у меня из головы — возможно, потому, что до сих пор время было незначительным для моей работы, и я работал только с компонентом даты — всегда видимым должным образом в понятном для человека формате.