Ошибка говорит о том, что setSeed
член org.apache.spark.mllib.clustering.StreamingKMeans
не существует (что можно проверить из API docs ; как ни странно, этот метод существует дляKMeans
class, но не для StreamingKMeans
).
Однако не все потеряно ...; -)
Метод setRandomCenters
принимает 3 параметра, третий -случайное семя.По умолчанию это значение равно Utils.random.nextLong
.Чтобы сделать то, что вы хотите, вы должны изменить эту строку с:
km.setRandomCenters(10, 0.5).setSeed(6250L)
на:
km.setRandomCenters(10, 0.5, 6250L)
ОБНОВЛЕНИЕ : Кстати, Spark использует парадигму функционального программирования .Следовательно, вызов метода, такого как .setRandomCenters
для экземпляра StreamingKMeans
, обычно не изменяет (или mutate ) этот экземпляр.Скорее, он создает новый экземпляр с примененными к нему модификациями.
В своем коде вы фактически отбрасываете изменения, сделанные SetRandomCenters
, потому что вы не сохраняете результат.Ваш код должен выглядеть примерно так:
val km = new StreamingKMeans(3, 1.0, "points").setRandomCenters(10, 0.5)
val newmodel = km.latestModel.update(featureVectors, 1.0, "points")
val prediction3 = id_features.map(x=> (x._1, newmodel.predict(x._2)))