在R Sparklyr中读取时间戳记值

问题描述 投票:0回答:1

我在读取以下格式的时间戳数据2020-01-20T19:37:58Z时遇到麻烦,该格式的数据作为字符存储在csv文件中。当使用spark_read_csv()读取数据时,控制台显示屏显示正确的值,但是,当我尝试获取时间戳的小时部分时,它将显示14的值,而不是实际的19

当然,我认为这是时区格式的问题。有没有一种方法可以阻止Spark尝试重新解释时间值,并仅在存储时将其保留?在我的实际情况中,我将有超过500gb的时间戳,所以我认为最好在read_*()中应用适当的时间戳格式,而不是必须在mutate()中进行设置。

我正在使用sparklyr 1.1.0R 3.6.2Spark 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)

r sparklyr
1个回答
0
投票

可能是,我们可以将其转换为Datetime类

library(lubridate)
library(dplyr)
sdf %>%
       mutate(c = ymd_hms(c),
                hour= hour(c))
© www.soinside.com 2019 - 2024. All rights reserved.