我已经在Scala中编写了我的程序,现在我想将它转换为Spark。
我在实现grouped
时遇到问题,该问题将列表的元素分组为特定长度。
以下是Scala中我想要在Spark中转换的代码Population
是RDD。
var pop = Population.grouped(dimensions).toList
我做了很多冲浪但都徒劳无功。有人可以帮帮我吗?
答案 0 :(得分:1)
以下是一种方法。
scala> val rdd = sc.parallelize('a' to 'z') //a sample dataset of alphabets
rdd: org.apache.spark.rdd.RDD[Char] = ParallelCollectionRDD[109] at parallelize at <console>:24
scala> rdd.zipWithIndex(). //add indices to rdd elements
| groupBy(_._2/3). // _._2 is the index which we divide by required dimension(3 here) for groups of that size
| map(_._2.map(_._1)). //_._2 here is the grouped contents on which we apply map to get the original rdd contents, ditch the index
| foreach(println)
List(g, h, i)
List(v, w, x)
List(p, q, r)
List(m, n, o)
List(a, b, c)
List(y, z)
List(d, e, f)
List(j, k, l)
List(s, t, u)
根据讨论@
Partition RDD into tuples of length n,此解决方案涉及一个随机播放(由于groupBy
),因此可能不是最佳的。
我认为你应该提一下用例来邀请更多相关的答案。