首页 > 解决方案 > Scala中大型嵌套地图的建议

问题描述

我需要根据两个标准聚合大量记录。举个例子,记录说一个人每天在哪个城市。

我需要在硬件非常有限且没有云的情况下进行此聚合。我不想为此将原始数据上传到数据库,原始数据真的很大(想想数十亿条记录)

我最初的想法是用一个人的ID来构建一个地图,它会是几百万,价值是一个地图,其中关键是城市,价值是他们在那个城市度过的天数。这是一个包含数百万个键的映射,每个值具有映射十分之几(少于 100 个)条目。

我想运行一些基准测试,并且我需要一些帮助来列出我可以使用的映射类型:可变/不可变、哈希/树......我也需要平衡性能和内存使用。任何帮助将不胜感激!

标签: scaladictionaryhashmapmutability

解决方案


如果性能很关键,您应该考虑在聚合过程中使用可变数据结构,因为 Scala 中的不变性,尤其是在大型记录的情况下,可能会导致性能显着下降。您可以查看这篇文章,也有针对不同集合的基准: https ://medium.com/@hussachai/scalas-immutable-collections-can-be-slow-as-a-snail-da6fc24bc688

此外,您应该考虑使用并行集合来加速记录处理: https ://alvinalexander.com/scala/how-to-use-parallel-collections-in-scala-performance

但是,内存使用可能是问题所在。您可能希望实现流式解决方案或使用例如 Apache Spark,而不是一次将所有数据保存在内存中,如果数据超过内存限制,您可以将数据保存在磁盘上


推荐阅读