我想将RDD拆分为由定界符分隔的元素序列。 说我有这个RDD:
val data = Array(1, 2, 0, 4, 5, 0, 4, 5, 6, 1, 2, 0, 4)
val distData = sc.parallelize(data)
我想将其转换为以下RDD:
(Seq(1, 2), Seq(4, 5), Seq(4, 5, 6, 1, 2), Seq(4))
我想保留该RDD的“惰性”,就是这样,我希望能够在不评估整个数据的情况下接受(n)。
我能够使用累加器和groupByKey来解决它,但是不幸的是,它不会保留惰性,因为groupByKey需要评估整个RDD。
val seqId = sc.longAccumulator("Sequance id")
distData
.flatMap { e =>
if (e == 0) {
seqId.add(1)
None
} else
Some(seqId.value, e)
}
.groupByKey()
.map { case(id, e) => e.toSeq }
有什么想法可以通过懒惰的方式解决这个问题吗?