【问题标题】:Map over CompactBuffer in an rdd在 rdd 中映射 CompactBuffer
【发布时间】:2017-12-22 16:57:28
【问题描述】:

我有一个如下的 groupByKey 的 RDD,

(1, CompactBuffer(2.0, 3.0, 4.0)), (2, CompactBuffer(1.0, -1.0, -2.0))

我希望将值映射到 (1*x_1^2, 2*x_2^2, 3*x_3^2)

应该是这个样子,

(1, CompactBuffer(4.0, 18.0, 48.0)), (2, CompactBuffer(1.0, 2.0, 12.0))

我该怎么办?

感谢您的帮助。

【问题讨论】:

  • 如何获取 CompactBuffer 中的第 n 个元素?

标签: scala rdd scala-2.10


【解决方案1】:

您可以使用mapValues 来处理使用zipStream(1, 2, ...) 的CompactBuffer 内容,如下所示:

val rdd = sc.parallelize(Seq(
  (1, 2.0),
  (1, 3.0),
  (1, 4.0),
  (2, 1.0),
  (2, -1.0),
  (2, -2.0)
))

val groupedRDD = rdd.groupByKey
// res1: Array[(Int, Iterable[Double])] = Array(
//   (1,CompactBuffer(2.0, 3.0, 4.0)), (2,CompactBuffer(1.0, -1.0, -2.0))
// )

groupedRDD.mapValues( l =>
  l.zip(Stream from 1).map{ case (v, i) => v * v * i }
)
// res2: Array[(Int, Iterable[Double])] = Array(
//   (1,List(4.0, 18.0, 48.0)), (2,List(1.0, 2.0, 12.0))
// )

【讨论】:

  • 我还有一个问题:link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多