在数据砖中使用Sparklyr查找日期列的最大值

问题描述

我只是想使用在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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...