当我尝试在列上对数据帧进行分组,然后尝试为每个分组groupbyDatafram.min('timestampCol')
找到最小值时,似乎我无法在非数字列上进行分组。那么,我如何在groupby上正确筛选最短(最早)日期?
我正在从postgresqlS3实例流式传输数据帧,这样数据就已经配置好了。
只需直接执行聚合,而不用min
助手:
import org.apache.spark.sql.functions.min
val sqlContext: SQLContext = ???
import sqlContext.implicits._
val df = Seq((1L, "2016-04-05 15:10:00"), (1L, "2014-01-01 15:10:00"))
.toDF("id", "ts")
.withColumn("ts", $"ts".cast("timestamp"))
df.groupBy($"id").agg(min($"ts")).show
// +---+--------------------+
// | id| min(ts)|
// +---+--------------------+
// | 1|2014-01-01 15:10:...|
// +---+--------------------+
与min
不同,它适用于任何类型的Orderable
。