#apache-spark #cluster-analysis #spark-graphx
#apache-искра #кластерный анализ #искра-graphx
Вопрос:
я использую алгоритм Spark GraphX pregel, где вершины являются координатами пересечения по широте / долготе, а ребра — это сегменты дороги — дорожная сеть. ради аргумента давайте предположим равномерную загрузку сообщений по вершинам во время выполнения алгоритма.
я хочу повысить производительность, обеспечив лучшее разделение. моей первой попыткой было создать PartitionStrategy
разделенные ребра, основанные на кластеризации их исходной координаты. я использовал алгоритм Spark k-means. затем я понял, что, хотя это отлично справляется с кластеризацией евклидовых точек, оно, как правило, плохо справляется с балансировкой нагрузки на вершины — размеры кластеров сильно различаются.
в дикой природе существуют методы агломеративной кластеризации, которые найдут приблизительное решение для этого. но, поскольку я уже в Spark, существует ли реализация, в которой он может создавать кластеры для некоторых k, которые (приблизительно) имеют одинаковый размер? или есть способ, который я не обнаружил, используя встроенные инструменты mllib?
Ответ №1:
Здесь вы найдете все алгоритмы кластеризации, которые в настоящее время поддерживает Spark.
Комментарии:
1. я знаком с этим списком; именно так я впервые выбрал, используя встроенный алгоритм Spark k-means (как указано выше). если какой-либо из этих алгоритмов имеет параметры, которые могут задать размер целевого кластера, пожалуйста, уточните. в противном случае я хотел бы узнать, существуют ли какие-либо другие реализации, поддерживающие эту цель (встроенные или найденные в другом месте, но использующие структуру Spark).