加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:58:15 所属栏目:安全 来源:网络整理
导读:假设我有一个包含(Int,Int)元组的RDD. 我希望把它变成一个Vector,其中元组中的第一个Int是索引,第二个是值. 任何想法我该怎么做? 我更新了我的问题并添加了我的解决方案以澄清: 我的RDD已经被密钥减少了,密钥的数量是已知的. 我想要一个向量来更新单个累加
假设我有一个包含(Int,Int)元组的RDD.
我希望把它变成一个Vector,其中元组中的第一个Int是索引,第二个是值.

任何想法我该怎么做?

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

我的最终解决方案是:

reducedStream.foreachRDD(rdd => rdd.collect({case (x: Int,y: Int) => {
  val v = Array(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(),但是如果有很多重复的元组具有可能不适合内存的相同键.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读