scala - 如何将已知的结构化 RDD 转换为 Vector

标签 scala vector apache-spark distributed-computing rdd

假设我有一个包含 (Int, Int) 元组的 RDD。
我希望把它变成一个 Vector,其中元组中的第一个 Int 是索引,第二个是值。

任何想法我该怎么做?

我更新了我的问题并添加了我的解决方案以澄清:
我的RDD已经被key减少了,key的个数是已知的。
我想要一个向量来更新单个累加器而不是多个累加器。

我的最终解决方案是:

reducedStream.foreachRDD(rdd => rdd.collect({case (x: Int,y: Int) => {
  val v = Array(0,0,0,0)
  v(x) = y
  accumulator += new Vector(v)
}}))

使用 Vector来自文档中的累加器示例。

最佳答案

rdd.collectAsMap.foldLeft(Vector[Int]()){case (acc, (k,v)) => acc updated (k, v)}

将 RDD 变成 Map。然后迭代它,边走边构建一个 Vector。

您可以使用 justt collect(),但是如果具有相同键的元组有很多重复可能不适合内存。

关于scala - 如何将已知的结构化 RDD 转换为 Vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555604/

相关文章:

java - circleCI 中的 "$ play test"下拉菜单是什么?

mysql - Slick 为 MySQL (MyISAM) 生成错误的 SQL

image-processing - 向矢量添加噪声

apache-spark - 如何在 Spark RDD 中选择一系列元素?

java - Spark + Java 中从 String 到 Tuple2<String, Long> 的映射

sql - SparkSQL : conditional sum on range of dates

用于选项的 Scala Monoid 组合器

scala - 我什么时候应该(或者不应该)使用 Scala 的 @inline 注释?

c++ - 在C++中访问 vector 内部的数组

java - 矩形对象抛出错误,说它在java中找不到.contains()方法