Spark:将元素流拆分为元素列表流

时间:2018-08-26 06:25:46

标签: scala apache-spark

我想将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 }

有什么想法可以通过懒惰的方式解决这个问题吗?

0 个答案:

没有答案