Apache spark Spark分组聚合函数

Apache spark Spark分组聚合函数,apache-spark,spark-dataframe,aggregate-functions,apache-spark-dataset,Apache Spark,Spark Dataframe,Aggregate Functions,Apache Spark Dataset,我有一个Dataset[Step],我想对“Id”列执行groupBy操作。 我的输出应该类似于Dataset[(Long,List[Step])。我该怎么做 假设变量“inquiryStepMap”的类型为Dataset[Step],那么我们可以使用RDD进行如下操作 case class Step (Id : Long, stepNum : Long, stepId : Int, stepT

我有一个Dataset[Step],我想对“Id”列执行groupBy操作。 我的输出应该类似于Dataset[(Long,List[Step])。我该怎么做

假设变量“inquiryStepMap”的类型为Dataset[Step],那么我们可以使用RDD进行如下操作

case class Step (Id : Long,
                 stepNum : Long,
                 stepId : Int,
                 stepTime: java.sql.Timestamp
                 )

似乎您需要
groupByKey

样本:

val inquiryStepGrouped: RDD[(Long, Iterable[Step])] = inquiryStepMap.rdd.groupBy(x => x.Id)

groupByKey
然后
mapGroups

import java.sql.Timestamp    
val t = new Timestamp(2017, 5, 1, 0, 0, 0, 0)    
val ds = Seq(Step(1L, 21L, 1, t), Step(1L, 20L, 2, t), Step(2L, 10L, 3, t)).toDS()
ds.groupByKey(_.Id).mapGroups((Id, Vals) => (Id, Vals.toList))
// res18: org.apache.spark.sql.Dataset[(Long, List[Step])] = [_1: bigint, _2: array<struct<Id:bigint,stepNum:bigint,stepId:int,stepTime:timestamp>>]
ds.groupByKey(_.Id).mapGroups((Id, Vals) => (Id, Vals.toList)).show()
+---+--------------------+
| _1|                  _2|
+---+--------------------+
|  1|[[1,21,1,3917-06-...|
|  2|[[2,10,3,3917-06-...|
+---+--------------------+