【发布时间】:2021-06-01 17:38:03
【问题描述】:
我有一个这样的数据集:
|Seq_key| |Class_id| |value|
Seq_key 1 Class_id 1 value 1
Seq_key 1 Class_id 2 value 2
Seq_key 1 Class_id 3 value 3
Seq_key 1 Class_id 4 value 4
Seq_key 1 Class_id 5 value 5
Seq_key 1 Class_id 6 value 6
Seq_key 2 Class_id 1 value 1
Seq_key 2 Class_id 2 value 2
Seq_key 2 Class_id 3 value 3
Seq_key 2 Class_id 4 value 4
Seq_key 2 Class_id 5 value 5
Seq_key 2 Class_id 6 value 6
Seq_key 2 Class_id 7 value 7
Seq_key 3 Class_id 1 value 1
Seq_key 3 Class_id 2 value 2
Seq_key 3 Class_id 3 value 3
Seq_key 3 Class_id 4 value 4
Seq_key 3 Class_id 5 value 5
Seq_key 3 Class_id 6 value 6
Seq_key 3 Class_id 7 value 7
Seq_key 3 Class_id 8 value 8
每个Seq_key 的Class_ids 和values 是互斥的。
我对每个 Seq_key 应用 k-means 聚类,并找到最佳数量的聚类、质心等,以便每个 Seq_key 的输出如下所示:
|Seq_key| |Class id| |Cluster| |Centroid|
Seq_key 1 Class_id 1 1 128
Seq_key 1 Class_id 2 2 56
Seq_key 1 Class_id 3 3 100
Seq_key 1 Class_id 4 1 128
Seq_key 1 Class_id 5 1 128
Seq_key 1 Class_id 6 4 72
Seq_key 2 Class_id 1 1 5.5
Seq_key 2 Class_id 2 1 5.5
Seq_key 2 Class_id 3 2 3.4
Seq_key 2 Class_id 4 3 1.7
Seq_key 2 Class_id 5 1 5.5
Seq_key 2 Class_id 6 2 3.4
Seq_key 2 Class_id 7 2 3.4
Seq_key 3 Class_id 1 4 500
Seq_key 3 Class_id 2 1 700
Seq_key 3 Class_id 3 3 274
Seq_key 3 Class_id 4 2 189
Seq_key 3 Class_id 5 2 189
Seq_key 3 Class_id 6 4 500
Seq_key 3 Class_id 7 1 700
Seq_key 3 Class_id 8 3 274
目前,我手动循环遍历每个 Seq_key 并应用 pyspark.ml.clustering 库中的 k-means 算法。但这显然是低效的,因为seq_keys 的数量增加到数万。另外,我没有正确利用 spark 的分布式计算。
Seq_key 互斥,不能与其他Seq_keys 聚类
有没有办法通过ml 库中的groupBy 类似方法来实现我的输出?
即使只是计算由Seq_key 分组的质心就足够了。
这可能吗?
【问题讨论】:
标签: apache-spark pyspark k-means hierarchical-clustering