Вот код, который использует Spark ML для поиска кластеров:
val dfRaw = spark.read.option("header", "true")
.csv("src/main/resources/input.csv")
val K = 5
val assembler = new VectorAssembler().setInputCols(Array("id", "lat", "lon")).setOutputCol("features")
val df = assembler.transform(dfRaw).select("features")
df.show(false)
val kmeans = new KMeans().setK(K).setSeed(1L)
val model : KMeansModel = kmeans.fit(df)
println("cluster centers")
model.clusterCenters.foreach(println)
println("----- predictions")
val predictions = model.transform(df)
predictions.collect().foreach(println)
Входной файл состоит из следующих 4 столбцов: id, name, lat, lon
Я уверен, что я делаю некоторые глупости в этом коде, но он вроде работает (я думаю). Любые советы по его улучшению приветствуются. Мне интересно, влияет ли столбец id на кластеризацию данных.
Я также изо всех сил пытаюсь понять результаты. Какой хороший способ объединить предсказания (DF of Vector) со столбцом имени dfRaw?
Кроме того, я хотел бы представить результаты на какой-нибудь бесплатной сетке или географической карте, какие-либо рекомендации?