Sparklyr - изменение формата даты в Spark

У меня есть фреймворк Spark со столбцом characters как 20/01/2000 (день / месяц / год).

Но я пытаюсь изменить его формат на дату, поэтому я смогу использовать здесь функции: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions, чтобы получить только те данные, которые мне нужны (что касается месяцев извлечения и дней, например).

Но похоже, что функции работают только тогда, когда я использую другие форматы дат, например, 1970-01-30.

Пример:

sc <- spark_connect(master = "spark://XXXX")
df <- data.frame(date = c("20/10/2010", "19/11/2010"))
df_tbl <- copy_to(sc, df, "df")

Если я хочу извлечь только месяц в новый столбец:

df_tbl <- df_tbl %>% mutate(month = month(date))

Я получил:

> df_tbl %>% glimpse()
Observations: 2
Variables: 2
$ data  <chr> "20/10/2010", "19/11/2010"
$ month <int> NA, NA

Поскольку функция R as.Date() не работает, мне пришлось бы использовать другой инструмент.

какие-нибудь подсказки?


person Igor    schedule 03.08.2017    source источник


Ответы (3)


Как уже выяснилось, это не удается, потому что 19/11/2010 не является допустимым форматом даты. В Spark 2.2 или новее вы можете:

df_tbl %>% mutate(month = month(to_date(date, "dd/MM/yyyy")))

# # Source:   lazy query [?? x 2]
# # Database: spark_connection
#   date       month
#    <chr>      <int>
# 1 20/10/2010    10
# 2 19/11/2010    11

В версии 2.1 или ранее:

df_tbl %>% 
  mutate(month = month(from_unixtime(unix_timestamp(date, "dd/MM/yyyy"))))

# # Source:   lazy query [?? x 2]
# # Database: spark_connection
#   date       month
#   <chr>      <int>
# 1 20/10/2010    10
# 2 19/11/2010    11

и только форматирование:

df_tbl %>%  
   mutate(formatted = from_unixtime(
     unix_timestamp(date, "dd/MM/yyyy"), "dd-MM-yyy"))

# # Source:   lazy query [?? x 2]
# # Database: spark_connection
#   date       formatted 
#   <chr>      <chr>     
# 1 20/10/2010 20-10-2010
# 2 19/11/2010 19-11-2010
person Alper t. Turker    schedule 21.01.2018

sparklyr пока не поддерживает дату типа столбца.

person Jake Russ    schedule 08.08.2017

Для этого вы можете использовать определенные функции Hive (на которых основан Spark SQL), см. https://spark.rstudio.com/articles/guides-dplyr.html#hive-functions

person edgararuiz    schedule 15.08.2017