Sparklyr - 在 Spark 中更改日期格式
Sparklyr - Changing date format in Spark
我有一个 Spark 数据框,其列 characters
为 20/01/2000 (day/month/year)。
但我正在尝试将其更改为日期格式,因此我可以使用此处的函数: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()
不起作用,我不得不使用其他工具。
有什么线索吗?
sparklyr 尚不支持列类型日期。
您可以使用 Hive(这是 Spark SQL 的基础)定义的函数来完成此操作,请参阅:https://spark.rstudio.com/articles/guides-dplyr.html#hive-functions
如前所述,这失败了,因为 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
我有一个 Spark 数据框,其列 characters
为 20/01/2000 (day/month/year)。
但我正在尝试将其更改为日期格式,因此我可以使用此处的函数: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()
不起作用,我不得不使用其他工具。
有什么线索吗?
sparklyr 尚不支持列类型日期。
您可以使用 Hive(这是 Spark SQL 的基础)定义的函数来完成此操作,请参阅:https://spark.rstudio.com/articles/guides-dplyr.html#hive-functions
如前所述,这失败了,因为 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