强制R在dbplyr mutate_at Spark翻译中使用单引号



我希望在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")

我完全知道还有其他方法可以做到这一点,但这是我的用例要求我这样做的方式,所以请在回答中具体说明。

我建议使用mutatedate_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

最新更新