Как подать ключ, пару значений и построить 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)

Теперь мне нужно отфильтровать RDD PatientID от MED1_MED2_lowest_dates, где наименьшая дата MED2 предшествует самой низкой дате MED1. Как это сделать?

Всего 1 ответ


Рассмотрим следующий код, который делает то, что говорит ваш вопрос. Он использует образец 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

Есть идеи?

10000