问题描述
我只是想使用在databricks中使用sparklyr导入的数据来查找日期列的最大值:
data %>% dplyr::select(date_variable) %>% max()
这将返回错误:
Error in max(.) : invalid 'type' (list) of argument Error in max(.) : invalid 'type' (list) of argument
如果我只是做max(data$date_variable)
,它将得到-inf
。当然max()
和min()
必须是其中最常用的功能之一?我在这里做什么错了?
解决方法
library(sparklyr)
sc <- spark_connect(method = "databricks")
data <- sdf_sql(sc,"SELECT DATE('2020-01-01') AS date_variable UNION SELECT DATE('2020-01-02') AS date_variable")
data
是一个Spark数据框。 select
的结果仍然是Spark数据帧,无法与max
一起使用。
data %>% dplyr::select(date_variable) %>% class()
#> [1] "tbl_spark" "tbl_sql" "tbl_lazy" "tbl"
有两种获取最大值的主要方法。
如果您使用pull
,则结果是Date
向量,可以与max
一起使用。
data %>% dplyr::pull(date_variable) %>% max()
#> [1] "2020-01-02"
该方法的缺点是计算未在Spark中完成。要在Spark中进行计算,请使用summarise
。
data %>% dplyr::summarise(max_date = max(date_variable))
#> # Source: spark<?> [?? x 1]
#> max_date
#> <date>
#> 1 2020-01-02