scala - Scala中大型嵌套地图的建议
问题描述
我需要根据两个标准聚合大量记录。举个例子,记录说一个人每天在哪个城市。
我需要在硬件非常有限且没有云的情况下进行此聚合。我不想为此将原始数据上传到数据库,原始数据真的很大(想想数十亿条记录)
我最初的想法是用一个人的ID来构建一个地图,它会是几百万,价值是一个地图,其中关键是城市,价值是他们在那个城市度过的天数。这是一个包含数百万个键的映射,每个值具有映射十分之几(少于 100 个)条目。
我想运行一些基准测试,并且我需要一些帮助来列出我可以使用的映射类型:可变/不可变、哈希/树......我也需要平衡性能和内存使用。任何帮助将不胜感激!
解决方案
如果性能很关键,您应该考虑在聚合过程中使用可变数据结构,因为 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,而不是一次将所有数据保存在内存中,如果数据超过内存限制,您可以将数据保存在磁盘上
推荐阅读
- angular - 带有角度和 SpringBoot 的 POST 请求出现问题
- python - Pyspark - 将列转换为列表
- c++ - 如何在没有未来的情况下从线程中获取值?
- bash - cd - vs cd .. 解释
- javascript - 如何从 DropDownList 列表中找到选定的 DropDownList?
- python - Matplotlib 在独立(Exe)Python 文件中的使用
- dhcp - ISC DHCP 服务器 - 拒绝池中具有固定地址的已知客户端
- c# - 将 .net core 3.1 web api 发布到远程服务器时出现问题
- google-cloud-platform - Dataproc 集群无法初始化
- java - 捕获布局并将其保存为图像