我希望在Spark DataFrame上使用dplyr::mutate_at()
来转换日期列。假设这是我的数据:
sc <- sparklyr::spark_connect(master = "local")
df <- dplyr::copy_to(
sc,
data.frame(x = structure(18601, class = "Date")),
"df"
)
df
# # Source: spark<df> [?? x 1]
# x
# <date>
# 1 2020-12-04
如果我想提取此日期的元素,我可以使用配置单元UDFdate_format(., fmt)
,但在指定fmt
时,必须使用单引号。然而,由于R将单引号转换为双引号,我的尝试被挫败了。
mutate_at(df, "x", ~date_format(., 'E')) %>% dbplyr::sql_render()
# <SQL> SELECT date_format(`x`, "E") AS `x`
# FROM (SELECT date_format(`x`, "E") AS `x`
# FROM `df`) `q01`
注意'E'
是如何变成"E"
的。我已经尝试建立呼叫,但这也不起作用
call(name = "date_format", quote(.), quote('E'))
# date_format(., "E")
我完全知道还有其他方法可以做到这一点,但这是我的用例要求我这样做的方式,所以请在回答中具体说明。
我建议使用mutate
和date_format
,如下所示:
> df %>% mutate(x = date_format(x, 'E'))
# Source: spark<?> [?? x 1]
x
<chr>
1 Sat
您也可以使用sdf_sql
:编写带有单引号的SQL
> sdf_sql(sc, "SELECT date_format(x, 'E') AS x FROM df")
# Source: spark<?> [?? x 1]
x
<chr>
1 Sat
我假设您使用的是Spark 3.0.1