Scala ComTime 2 KeyValueGroupedDataset
我有2个数据集,我按键分组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"
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)|
+---+------------------------------------------------------------------------+