通过Spark groupBy数据帧找到时间戳的最小值

Jak*_*und 6 sql scala apache-spark apache-spark-sql

当我尝试将我的数据框分组到一列时,然后尝试找到groupbyDatafram.min('timestampCol')它出现的每个分组的最小值我不能在非数字列上进行.那我怎样才能正确过滤groupby上的最小(最早)日期?

我从postgresql S3实例流式传输数据帧,以便已经配置了数据.

zer*_*323 11

只需直接执行聚合而不是使用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:...|
// +---+--------------------+
Run Code Online (Sandbox Code Playgroud)

不同于min它适用于任何Orderable类型.

  • 尝试:`import org.apache.spark.sql.functions._` (3认同)