首页 > 解决方案 > 如何仅根据值的逻辑条件过滤键、值对并构造键的 rdd?

问题描述

val MED1_dates = medication.map{rec =>
                                val patientID = rec.patientID
                                (patientID, rec.date)
                               }

val MED1_lowest_dates = MED1_dates.reduceByKey{
  case(d1,d2) => (
    if(d1.before(d2)) d1 else d2
  )
}

val MED2_dates = medication.map{rec =>
  val patientID = rec.patientID
  (patientID, rec.date)
}

val MED2_lowest_dates = MED1_dates.reduceByKey{
  case(d1,d2) => (
    if(d1.before(d2)) d1 else d2
    )
}

val MED1_MED2_lowest_dates = MED1_lowest_dates.join(MED2_lowest_dates)

现在我需要从 MED1_MED2_lowest_dates 中过滤出患者 ID 的 RDD,其中 MED2 最低日期在 MED1 最低日期之前。怎么做?

标签: scalaapache-spark

解决方案


考虑以下代码,它可以满足您的问题。它使用一个示例 RDD 来演示这一点。您可以将类似的逻辑应用于您的问题。

val list = List((1 -> "Pune"),(2 -> "Mumbai"),(3 -> "Delhi"))
val rdd = sc.parallelize(list)
val filtered = rdd.filter{case (k,v) => (v.equals("Delhi"))}
// I HAVE USED collect as my RDD does not contain lot of data.
filtered.keys.collect

推荐阅读