У меня есть Rdd "labResults" объектов:
case class LabResult(patientID: String, date: Long, labName: String, value: String)
Я хочу преобразовать этот rdd так, чтобы он включал только одну строку для каждой комбинации PatientID и LabName.Эта строка должна быть самой последней строкой для этой комбинации PatientID и labName (меня интересует только последняя дата, когда у пациента была эта лаборатория).Я делаю это следующим образом:
//group rows by patient and lab and take only the last one
val cleanLab = labResults.groupBy(x => (x.patientID, x.labName)).map(_._2).map { events =>
val latest_date = events.maxBy(_.date)
val lab = events.filter(x=> x.date == latest_date)
lab.take(1)
}
Поздно я хочу создать ребра из этого СДР:
val edgePatientLab: RDD[Edge[EdgeProperty]] = cleanLab
.map({ lab =>
Edge(lab.patientID.toLong, lab2VertexId(lab.labName), PatientLabEdgeProperty(lab).asInstanceOf[EdgeProperty])
})
и получаю ошибку:
value patientID is not a member of Iterable[edu.gatech.cse6250.model.LabResult]
[ошибка] Edge (lab.patientID.toLong, lab2VertexId (lab.labName), PatientLabEdgeProperty (lab) .asInstanceOf [EdgeProperty]) [ошибка] ^ [ошибка] / hw4 / stu_code / src / main / scala / edu /gatech / cse6250 / graphconstruct / GraphLoader.scala: 94: 53: значение labName не является членом Iterable [edu.gatech.cse6250.model.LabResult] [ошибка] Edge (lab.patientID.toLong, lab2VertexId (lab.labName), PatientLabEdgeProperty (lab) .asInstanceOf [EdgeProperty]) [ошибка] ^ [ошибка] /hw4/stu_code/src/main/scala/edu/gatech/cse6250/graphconstruct/GraphLoader.scala:94:86: несоответствие типов;[ошибка] найдена: Iterable [edu.gatech.cse6250.model.LabResult] [ошибка] требуется: edu.gatech.cse6250.model.LabResult [ошибка] Edge (lab.patientID.toLong, lab2VertexId (lab.labName), PatientLabEdgeProperty(lab) .asInstanceOf [EdgeProperty])
Итак, похоже, проблема в том, что «cleanLab» не является ни СДР LabResult, как я ожидал, но СДР Iterable [edu.gatech.cse6250.model.LabResult]
Как я могу это исправить?