【问题标题】:Alternative of "grouped" in sparkspark中“分组”的替代方案
【发布时间】:2018-03-19 04:43:06
【问题描述】:

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

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

以下是我想在 Spark 中转换的 Scala 代码,其中Population 是一个 RDD。

var pop = Population.grouped(dimensions).toList

我做了很多冲浪,但都是徒劳的。有人可以帮帮我吗?

【问题讨论】:

  • 转换成Spark是什么意思?如果 Population 已经是一个 RDD,那么 pop 也是一个 RDD 并且 RDD 在 Spark 中。那么你的期望是什么?你能用恰当的例子解释一下吗?
  • 如果要分组,有groupBy功能。但建议做一个reduceBy,因为这将避免不必要的洗牌。最重要的是,您需要编写指定如何分组的函数

标签: scala apache-spark


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

我认为您也应该提及用例以邀请更多相关答案。

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2018-02-07
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多