Apache spark 如何使用Spark数据集GroupBy()

Apache spark 如何使用Spark数据集GroupBy(),apache-spark,group-by,dataset,apache-spark-sql,rdd,Apache Spark,Group By,Dataset,Apache Spark Sql,Rdd,我有一个架构为的配置单元表: id bigint name string updated_dt bigint 有许多记录具有相同的id,但名称和更新的\u dt不同。对于每个id,我想返回更新的最大的_dt的记录(整行) 我目前的做法是: 从配置单元中读取数据后,我可以使用case类将数据转换为RDD,然后使用groupBy()将具有相同id的所有记录分组在一起,然后选择更新量最大的记录。比如: dataRdd.groupBy(_.id).

我有一个架构为的配置单元表:

id             bigint
name           string
updated_dt     bigint
有许多记录具有相同的id,但名称和更新的\u dt不同。对于每个id,我想返回更新的最大的_dt的记录(整行)

我目前的做法是:

从配置单元中读取数据后,我可以使用case类将数据转换为RDD,然后使用groupBy()将具有相同id的所有记录分组在一起,然后选择更新量最大的记录。比如:

 dataRdd.groupBy(_.id).map(x => x._2.toSeq.maxBy(_.updated_dt))
但是,由于我使用Spark 2.1,它首先使用case类将数据转换为dataset,然后上述方法将数据转换为RDD,以便使用groupBy()。将数据集转换为RDD可能会有一些开销。所以我想知道我是否可以在数据集级别实现这一点而不转换为RDD


非常感谢

以下是如何使用
数据集

data.groupBy($"id").agg(max($"updated_dt") as "Max") 
如果将其转换为
RDD
,则不会有太多开销。如果您选择使用
RDD
,则可以使用
.reduceByKey()
而不是使用
.groupBy()
对其进行优化:


谢谢“data.groupBy($“id”).agg(max($“updated_dt”)作为“max”)只返回max updated_dt,但我想返回max updated_dt的整个记录/行。它在@user8371915发布的链接中提到
dataRdd.keyBy(_.id).reduceByKey((a,b) => if(a.updated_dt > b.updated_dt) a else b).values