查找Spark RDD中的最新/最早日期

时间:2019-02-11 17:21:45

标签: scala apache-spark rdd

我有一个由

组成的m2 RDD
case class Medication(patientID: String, date: Date, medicine: String)

,我需要找到第一天和最后一天。我尝试过

val latest_date_m2  = m2.maxBy(_.date).date

我知道了

No implicit Ordering defined for java.sql.Date.
[error]       val latest_date_m2 = m2.maxBy(_.date).date

Scala似乎“不知道”如何比较日期。我认为,我需要将maxBy替换为其他函数,但找不到该函数。

1 个答案:

答案 0 :(得分:3)

只需提供Ordering

import scala.math.Ordering

object SQLDateOrdering extends Ordering[java.sql.Date] {
  def compare(a: java.sql.Date, b: java.sql.Date) = a compareTo b
}

m2.maxBy(_.date)(SQLDateOrdering)

尽管值得注意的是,m2不能为RDD,因为RDD没有maxBy方法(很可能是Seq)。如果是RDD,则需要

object MedicationDateOrdering extends Ordering[Medication] {
  def compare(a: Medication, b: Medication) = a.date compareTo b.date
}

max

m2.max()(MedicationDateOrdering)