Scala RDD按组获取最早日期
Posted
技术标签:
【中文标题】Scala RDD按组获取最早日期【英文标题】:Scala RDD get earliest date by group 【发布时间】:2021-11-14 15:36:59 【问题描述】:我在 Scala 中有一个案例类 RDD,需要按每个组(患者 ID)查找最早的日期。
这是输入:
patientID date
000000047-01 2008-03-21T21:00:00Z
000000047-01 2007-10-24T19:45:00Z
000000485-01 2011-06-17T21:00:00Z
000000485-01 2006-02-22T18:45:00Z
预期应该是:
patientID date
000000047-01 2007-10-24T19:45:00Z
000000485-01 2006-02-22T18:45:00Z
我尝试了类似以下的方法,但没有成功
val out = medication.groupBy(x => x.patientID).sortBy(x => x.date).take(1)
【问题讨论】:
定义“不起作用”:您遇到什么错误?你有什么不明白的? 提示:groupBy
的返回类型是什么?
【参考方案1】:
好的! 所以我正确理解了你的问题,你希望每条记录都排在首位,如果是这种情况,那么我在这里创建了解决方案。
val dataDF = Seq(
("000000047-01", "2008-03-21T21:00:00Z"),
("000000047-01" , "2007-10-24T19:45:00Z"),
("000000485-01", "2011-06-17T21:00:00Z"),
("000000485-01", "2006-02-22T18:45:00Z"))
import spark.implicits._
val dfWithSchema = dataDF.toDF("patientId", "date")
val winSpec = Window.partitionBy("patientId").orderBy("date")
val rank_df = dfWithSchema.withColumn("rank", rank().over(winSpec)).orderBy(col("patientId"))
val result = rank_df.select(col("patientId"),col("date")).where(col("rank") === 1)
result.show()
如果您已经使用数据定义了架构,请忽略使用架构创建 DF
的步骤。
【讨论】:
谢谢!但我不想转换为数据框,我只想使用 RDD 转换。 好的,那么我们可以在所有这些操作之后不将DF转换为RDD吗?也许是result.rdd
,因为如果我们倾向于过滤需求,DF 是更合适的选择,也可能是数据集。以上是关于Scala RDD按组获取最早日期的主要内容,如果未能解决你的问题,请参考以下文章