【问题标题】:How to get min and max of clusters如何获取集群的最小值和最大值
【发布时间】:2019-06-24 23:08:31
【问题描述】:

我创建了一个 scala 程序来将 k-means 应用于数据框的特定列。数据框名称为df_items,列名称为price。

import org.apache.spark._
import org.apache.spark.sql.types._
import org.apache.spark.ml.clustering._
import org.apache.spark.ml.feature.VectorAssembler 

val df_items  = spark.read.format("csv").option("header","true").load(path.csv)

// need to cast because df_items("price") is String
df_items.createGlobalTempView("items")
val price = spark.sql("SELECT cast(price as double) price FROM global_temp.items")
case class Rows(price:Double)
val rows = price.as[Rows]
val assembler = new VectorAssembler().setInputCols(Array("price")).setOutputCol("features")
val data = assembler.transform(rows)
val kmeans = new KMeans().setK(6)
val model = kmeans.fit(data)
val predictions = model.summary.predictions

预测结果:

+------+--------+----------+
| price|features|prediction|
+------+--------+----------+
|  58.9|  [58.9]|         0|
| 239.9| [239.9]|         3|
| 199.0| [199.0]|         5|
| 12.99| [12.99]|         0|
| 199.9| [199.9]|         5|
|  21.9|  [21.9]|         0|
|  19.9|  [19.9]|         0|
| 810.0| [810.0]|         1|
|145.95|[145.95]|         5|
| ...  |   ...  |    ...   |

我的目标是获取一个集群(或所有集群)的最小值和最大值。有可能的?

非常感谢

【问题讨论】:

    标签: scala apache-spark k-means


    【解决方案1】:

    如果我正确理解您的问题,您可以使用groupBy 按预测列分组。

    predictions.groupBy("prediction")
               .agg(min(col("price")).as("min_price"),
                    max(col("price")).as("max_price"))
    

    这是你需要的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多