Предложения по большой вложенной карте в Scala - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужно объединить действительно большое количество записей по двум критериям. Скажем для примера, что в записях говорится, в каком городе человек находился ежедневно.

Мне нужно сделать это с очень ограниченным оборудованием и без облака. Я не хочу загружать исходные данные в базу данных для этого, исходные данные действительно большие (думаю, миллиарды записей)

Моя оригинальная идея состоит в том, чтобы построить карту с ключом, идентификатором человека, это будет несколько миллионов, а значение - это карта, где ключом является город, а значением является количество дней, которые они провели в этом городе. Это карта с миллионами ключей, и каждое значение содержит несколько десятых (менее 100) записей.

Я хочу запустить некоторые тесты и мне нужна помощь, чтобы вывести список типов карт, которые я могу использовать: изменяемые / неизменяемые, хэш / дерево ... Мне также нужно сбалансировать производительность с использованием памяти. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 07 ноября 2018

Если производительность критична, вам следует рассмотреть возможность использования изменяемых структур данных для процесса агрегации, поскольку неизменность в 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, где вы можете сохранить свои данные на диске, если они превышают лимит памяти

...