KMeans внутри искрового исполнителя очень медленный - PullRequest
0 голосов
/ 08 января 2019

У меня есть итеративный процесс, в котором KMeans применяется к ряду наборов данных в цикле, и результаты сохраняются. Так как это выполняется в цикле, это занимает больше времени. Я преобразовал его в задание Spark, где каждый набор данных представляет собой один раздел кадра данных Spark, а KMeans применяется к каждому из наборов данных параллельно. Эта искра работы работает на вершине YARN. Мне пришлось написать функцию карты, которая запускает KMeans (scikit learn) на каждом из разделов информационного кадра.

Обратите внимание, что я здесь не использую Kmeans Spark ML.

Однако KMeans запускается через несколько секунд при запуске из собственного Python, но внутри исполнителя pyspark для его запуска требуется около 10 минут.

У меня было интересное наблюдение, что когда KMeans запускается из драйвера python, он потребляет много ресурсов процессора и выполняется за 5 секунд. Когда один и тот же код выполняется внутри функции карты, он не получает много ресурсов ЦП и работает очень медленно. Я подозреваю, что это потому, что каждый искровый исполнитель получает определенное количество памяти и процессора (vcores). Этот ограниченный процессор, выделенный исполнителю искры, замедляет процесс.

Параметры, передаваемые в KMean, такие как num_iter, num_clusters, n_init и т. Д., В обоих случаях идентичны.

Есть ли способ улучшить скорость этого кода?

...