Примените K-средства для Scala к каждому элементу rdd.
У меня есть большой RDD в Spark Spark, где каждый элемент является массивом из массивов.
val rdd = sc.parallelize[array1[array1_1[], array1_2[], ....array1_24]], .... , array240[array240_1[], array240_2[], ....array240_24]]
Все элементы разные, и я должен применить алгоритм k-средних к каждому из них.
Но k-means в Spark работает только с RDD, а не с массивами.
Итак, я делаю дальше
for (i <= 0 to 240) {
val rdd = sc.parallelize[array1[array1_1[], array1_2[], ....array1_24]]]
Но это слишком медленно...
У меня есть кластер из 5 больших узлов, и они могут сделать больше...
Как я могу решить мою проблему без цикла?
1 ответ
Похоже, у вас здесь серьезная проблема с дизайном.
если каждый массив достаточно мал для эффективной локальной обработки на одном разделе, то использовать Spark MLlib нечего. Просто используйте вашу любимую нераспределенную библиотеку машинного обучения, чтобы обучать K-средства каждому предмету индивидуально. С большим кластером и небольшими данными Spark будет проводить большую часть времени, просто передавая сообщения.
если это не так, то использование массивов для хранения таких данных не имеет смысла. Либо каждый образец должен быть отдельным СДР, либо они могут быть объединены, но сплющены с помощью меток.
Исходя из вашего описания, похоже, что это первый случай. Если, несмотря ни на что, вы хотите использовать MLLib, попробуйте значительно уменьшить параллелизм для каждого RDD и постарайтесь строить свои задания отдельно, в зависимости от планировщика, который сделает все остальное.