小编典典

通过Spark组查找时间戳的最小值

sql

当我尝试将我的数据框分组到一个列上,然后尝试查找每个分组的最小值时,groupbyDatafram.min('timestampCol')似乎无法在非数字列上执行此操作。然后,如何正确过滤分组依据上的最短(最早)日期?

我正在从Postgresql S3实例流式传输数据帧,因此已经配置了数据。


阅读 402

收藏
2021-03-23

共1个答案

小编典典

只需直接执行聚合,而不使用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类型。

2021-03-23