Scala 修改zipWithIndex的功能

Scala 修改zipWithIndex的功能,scala,indexing,apache-spark,rdd,Scala,Indexing,Apache Spark,Rdd,我有一个RDD,它具有以下值: v v v v v v v v 我想索引上面的RDD。我想要索引它的方式是,如果一行有两个值,那么下一行的索引应该增加1,因此索引的RDD看起来像: v, 0 v v, 1 v, 3 v, 4 v v, 5 v, 7 那么,使用spark是否可能做到这一点?如果是,我如何做到这一点 更新1 此外,如果有人能够展示如何扩展zipWithIndex函数并创建一个新函数,该函数根据输入字符串为ex.(data,index+data.length)增加每行的索引,这将

我有一个RDD,它具有以下值:

v
v v
v
v
v v
v
我想索引上面的RDD。我想要索引它的方式是,如果一行有两个值,那么下一行的索引应该增加
1
,因此索引的RDD看起来像:

v, 0
v v, 1
v, 3
v, 4
v v, 5
v, 7
那么,使用spark是否可能做到这一点?如果是,我如何做到这一点

更新1


此外,如果有人能够展示如何扩展zipWithIndex函数并创建一个新函数,该函数根据输入字符串为ex.
(data,index+data.length)

增加每行的索引,这将是一个非常好的解决方案:这是一个可能缓慢但相对简单的解决方案:使用一些ID标记这些记录,拆分它们,使每个值成为一个单独的记录(然后可以使用
zipWithIndex
轻松枚举),然后使用我们创建的ID分组回原始结构:

// sample data:
val input = sc.parallelize(Seq(
  List("a"),
  List("b", "c"),
  List("d"),
  List("e", "f")
))

val result: RDD[(List[String], Long)] = input
  .zipWithIndex() // add key to each record, so we can construct them back later
  .flatMap { case (list, id) => list.map(i => (id, i)) } // "split" into individual records
  .sortByKey().zipWithIndex() // enumerate individual values
  .groupBy { case ((key, value), index) => key } // grouping by key
  .values.map { iter =>   // mapping back to the structure we want
     val list = iter.toList
     val index: Long = list.map(_._2).min
     val values: List[String] = list.map(_._1._2)
     (values, index)
   }
其结果将是:

(List(a),0)
(List(b, c),1)
(List(d),3)
(List(e, f),4)

v到底是什么?@meucaa“v”是任意数据。基本上,它们是空间分隔的值。