在Spark的RDD中更新值的有效方法是什么?

 少伶围脖 发布于 2023-01-10 10:53

我在写一个图形相关的程序ScalaSpark.数据集有400万个节点和400万个边缘(你可以将它视为一棵树),但是每次(a Iteration),我只编辑它的一部分,即由给定节点生根的子树和节点在给定节点和根之间的路径中.

Iteration有依赖,这意味着i+1 Iteration需求的结果来自何处i.所以我需要将每个结果存储到Iteration下一步.

我试图找到一种有效的更新方法RDD,但到目前为止还没有任何线索.我发现PairRDD有一个lookup函数可以将计算时间减少O(N)到O(M),N表示对象的总数RDDM表示数量每个分区中的元素.

所以我想反正有我可以更新的对象RDDO(M)?或者更理想的是,O(1)?(我在Spark的邮件列表中看到一封电子邮件说lookup可以修改以实现O(1))

另一件事是,如果我可以实现O(M)更新RDD,我可以将分区增加到比我拥有的内核数量更大的数量并获得更好的性能吗?

1 个回答
  • 作为功​​能数据结构,RDD是不可变的,并且RDD上的操作生成新的RDD.

    结构的不变性并不一定意味着完全复制.持久性数据结构是一种常见的功能模式,其中对不可变结构的操作产生新结构,但先前版本被维护并经常被重用.

    GraphX(Spark之上的'模块')是一个基于Spark的图形API,它使用了这样的概念:来自docs:

    通过生成具有所需更改的新图来完成对图的值或结构的更改.请注意,原始图形的大部分(即,未受影响的结构,属性和指标)在新图形中重复使用,从而降低了此固有功能数据结构的成本.

    它可能是解决手头问题的解决方案:http://spark.apache.org/docs/1.0.0/graphx-programming-guide.html

    2023-01-10 10:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有