火花

时间:2018-03-19 04:43:06

标签: scala apache-spark

我已经在Scala中编写了我的程序,现在我想将它转换为Spark。

我在实现grouped时遇到问题,该问题将列表的元素分组为特定长度。

以下是Scala中我想要在Spark中转换的代码Population是RDD。

var pop = Population.grouped(dimensions).toList

我做了很多冲浪但都徒劳无功。有人可以帮帮我吗?

1 个答案:

答案 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),因此可能不是最佳的。

我认为你应该提一下用例来邀请更多相关的答案。