Scala ComTime 2 KeyValueGroupedDataset

Scala ComTime 2 KeyValueGroupedDataset,scala,apache-spark,dataset,Scala,Apache Spark,Dataset,我有2个数据集,我按键分组 val stgDS = Seq(("1", "1"), ("1", "2"), ("1", "3"), ("1", "4"), ("1", "5"), ("2", "1"), ("2", "2"

我有2个数据集,我按键分组

val stgDS = Seq(("1", "1"), ("1", "2"), ("1", "3"), ("1", "4"), ("1", "5"), ("2", "1"), ("2", "2"), ("2", "3"), ("2", "4"), ("2", "5"))
      .toDF("number", "time")
      .as[Stg]

val aggDS = Seq(("1", "1"), ("1", "4"), ("1", "8"), ("2", "2"), ("2", "5"))
  .toDF("number", "time")
  .as[Agg]
之后,我可以像这样对每个值应用一个函数

stgDS.groupByKey(_.number)
  .flatMapGroups{case(k, iterator) => somefunction(iterator)}
我怎样才能组合

stgDS.groupByKey(_.number)
aggDS.groupByKey(_.number)
得到

(k, (iteratorStg, iteratorAgg))
然后表演

.flatMapGroups{case(k, (iteratorStg, iteratorAgg)) => somefunction(iteratorStg, iteratorAgg)}
我在看combineByKey finction,但要么它只是分组的另一个变体,要么我不知道它是如何工作的

简单的连接不行,因为我想分别在这些迭代器上循环。

两个迭代器可以结合使用

从cogroup文档:

将给定函数应用于每个共编组数据。对于每个唯一的组,函数将被传递分组键和2个迭代器,其中包含来自数据集this和other的组中的所有元素

代码

val stgGroupedDS=stgDS.groupByKey(u.number)
val aggggroupedds=aggDS.groupByKey(uz.number)
stggroupeds.cogroup(agggroupeds)(
//运行所需的任何逻辑,然后返回迭代器
(键:String,it1:Iterator[Stg],it2:Iterator[Avg])
=>Seq((key,it1.toList.mkString(“,”+“/”+it2.toList.mkString(“,”))
.迭代器
)
.show(假)
印刷品

+---+------------------------------------------------------------------------+
|_1 |_2                                                                      |
+---+------------------------------------------------------------------------+
|1 | Stg(1,1),Stg(1,2),Stg(1,3),Stg(1,4),Stg(1,5)//平均值(1,1),平均值(1,4),平均值(1,8)|
|2 | Stg(2,1),Stg(2,2),Stg(2,3),Stg(2,4),Stg(2,5)//Avg(2,2),Avg(2,5)|
+---+------------------------------------------------------------------------+