У меня проблемы с чтением меток времени следующего формата, 2020-01-20T19:37:58Z
, хранящихся в виде символа в CSV-файле. При чтении данных с использованием spark_read_csv()
на дисплее консоли отображается правильное значение, однако, когда я пытаюсь получить часовую часть метки времени, оно показывает значение 14
, а не фактическое 19
.
Конечно, я предполагаю, что это проблема с форматированием часового пояса. Есть ли способ, которым я могу предотвратить попытки Spark переосмыслить значения времени и просто сохранить их в том виде, в котором они хранятся? В моем случае у меня будет более 500 ГБ меток времени, поэтому я думаю, что было бы лучше применить правильный формат метки времени в read_*()
, чем делать это в mutate()
.
Я использую sparklyr 1.1.0
, R 3.6.2
и Spark 2.3.3
.
library(tidyverse)
library(sparklyr)
sc <- spark_connect(master = "local", version = "2.3")
df <- tibble(a = 1, b = "b", c = "2020-01-20T19:37:58Z") %>% print()
df %>% write_csv("time_test.csv")
# The time appears to be the same
sdf <- spark_read_csv(sc, "time_test.csv", overwrite = TRUE)
sdf
# The hive 'hour' function doesn't work, presumably a dbplyr issue
sdf %>% mutate(hour = hour(c))
# This succeeds, but the hour is wrong, it shows 14 instead of 19
sdf %>% mutate(hour = sql('hour(`c`)'))
# Disconnect
spark_disconnect(sc)