У меня проблема с большими данными, и у меня очень ограниченный опыт параллельной обработки и больших данных. У меня есть сотни миллионов строк, состоящих из данных широты и долготы и нескольких идентификаторов. Для каждого идентификатора у меня могут быть данные в диапазоне от 10000 до 10 миллионов.
Я реализую алгоритм кластеризации на основе плотности (DBSCAN) для решения некоторых бизнес-требований. Алгоритм кластеризации выполняется независимо для каждого идентификатора.
Текущая реализация
Текущая реализация основана на коде Python с использованием библиотеки машинного обучения sklearn, но для выполнения (кластеризация + другая бизнес-логика) требуется день или больше (кластеризация + другая бизнес-логика) для примерно 50 миллионов точек данных.
Я могу оптимизировать код Python и сократить время, но я ищу более подходящее решение.
Доступность
У меня есть искровой кластер, распределенный по примерно 20 машинам, но в pyspark нет реализации DBSCAN. После некоторого поиска я мог найти некоторые реализации scala, но они кажутся менее надежными. URL-адреса из моего поиска. https://github.com/irvingc/dbscan-on-spark
DBSCAN на spark: какая реализация
Поскольку весь мой код написан на питоне, я хотел бы придерживаться более питонического решения.
Как я уже упоминал, алгоритм кластеризации работает независимо для каждого устройства. Один из способов сократить время — распределить вычисление каждого идентификатора параллельно на все 20 машин. Так что я мог бы получить как минимум в 20 раз лучшую производительность. Но я понятия не имею, как этого добиться. Все, о чем я могу думать, это MapReduce.
Я открыт для любого более надежного решения. Любая помощь будет принята с благодарностью.