Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何向reduceByKey的结果中添加递增id并使用mapValues进行排序_Scala_Apache Spark - Fatal编程技术网

Scala 如何向reduceByKey的结果中添加递增id并使用mapValues进行排序

Scala 如何向reduceByKey的结果中添加递增id并使用mapValues进行排序,scala,apache-spark,Scala,Apache Spark,我有一个RDD(键、值),例如: 结果是: (1,3) (1,2) (2,7) (2,5) (2,1) (3,10) 我想要的结果是: (1,3,1) (1,2,2) (2,7,1) (2,5,2) (2,1,3) (3,10,1) 有没有其他方法可以解决这个问题?您只需要zipWithIndex来创建分组的RDD的值的排序zipWithIndex将从0开始,因此需要进行一些修改才能从1开始 以下解决方案应该适合您 val rddInit = sc.parallelize(List((1,

我有一个RDD(键、值),例如:

结果是:

(1,3)
(1,2)
(2,7)
(2,5)
(2,1)
(3,10)
我想要的结果是:

(1,3,1)
(1,2,2)
(2,7,1)
(2,5,2)
(2,1,3)
(3,10,1)

有没有其他方法可以解决这个问题?

您只需要
zipWithIndex
来创建分组的
RDD
的值的排序
zipWithIndex
将从
0
开始,因此需要进行一些修改才能从
1
开始

以下解决方案应该适合您

val rddInit = sc.parallelize(List((1, 2), (1, 3), (2, 5), (2, 7),(2,1), (3, 10)))
val rddData = rddInit.groupByKey.mapValues(row=>{row.toList.sortWith(_>_)}.zipWithIndex.map{ case (r, i) => (r,i+1)})
val rddRestored = rddData.flatMap{
  case (k, v) => {
    v.map(x =>(k, x._1, x._2))
  }
}
rddRestored.collect().foreach(println)
您应该有以下输出

(1,3,1)
(1,2,2)
(3,10,1)
(2,7,1)
(2,5,2)
(2,1,3)

您只需
zipWithIndex
即可创建分组的
RDD
值的排序
zipWithIndex
将从
0
开始,因此您需要从
1
开始进行一些修改

以下解决方案应该适合您

val rddInit = sc.parallelize(List((1, 2), (1, 3), (2, 5), (2, 7),(2,1), (3, 10)))
val rddData = rddInit.groupByKey.mapValues(row=>{row.toList.sortWith(_>_)}.zipWithIndex.map{ case (r, i) => (r,i+1)})
val rddRestored = rddData.flatMap{
  case (k, v) => {
    v.map(x =>(k, x._1, x._2))
  }
}
rddRestored.collect().foreach(println)
您应该有以下输出

(1,3,1)
(1,2,2)
(3,10,1)
(2,7,1)
(2,5,2)
(2,1,3)

不必在意从0或1开始,它似乎没有按键分组查看我的结果。它与您所评论的内容不匹配。我猜您一定缺少一些括号。val rddData=rddInit.groupByKey.mapValues(row=>{row.toList.sortWith(>)}.mapValues(row=>(row,row.\u 2.zipWithIndex))我这样解决问题,非常感谢。:)很高兴能帮助你:)你可以接受答案,如果你想从0或1开始,它似乎得到(1,3,1)(1,2,2)(3,10,3)(2,7,4)(2,5,5)(2,1,6)不是按键分组查看我的结果。它与您的评论不匹配。我猜您一定缺少一些括号。val rddData=rddInit.groupByKey.mapValues(row=>{row.toList.sortWith(>)}.mapValues(row=>(row,row.\u 2.zipWithIndex))我这样解决了问题,谢谢您,太好了。:)很高兴能帮助你:)如果你愿意,你可以接受答案