Apache spark 计算pyspark数据帧中的聚类成本

Apache spark 计算pyspark数据帧中的聚类成本,apache-spark,dataframe,pyspark,distributed-computing,k-means,Apache Spark,Dataframe,Pyspark,Distributed Computing,K Means,我有一个百万条记录的数据帧,我使用了pysparkml KMeans为了识别簇,现在我想找到我使用的簇数的集内平方和误差((WSSSE) 我的spark版本是1.6.0,在spark 2.0.0之前pyspark ml中不提供computeCost,所以我必须自己制作 我用这种方法来寻找平方误差,但它需要很长时间才能给出结果。我正在寻找一种更好的方法来寻找WSSSE check_error_rdd = clustered_train_df.select(col("C5"),col("predic

我有一个百万条记录的数据帧,我使用了
pyspark
ml

KMeans为了识别簇,现在我想找到我使用的簇数的集内平方和误差((WSSSE)

我的spark版本是1.6.0,在spark 2.0.0之前pyspark ml中不提供computeCost,所以我必须自己制作

我用这种方法来寻找平方误差,但它需要很长时间才能给出结果。我正在寻找一种更好的方法来寻找WSSSE

check_error_rdd = clustered_train_df.select(col("C5"),col("prediction"))

c_center = cluster_model.stages[6].clusterCenters()
check_error_rdd = check_error_rdd.rdd
print math.sqrt(check_error_rdd.map(lambda row:(row.C5- c_center[row.prediction])**2).reduce(lambda x,y: x+y) )
clustered\u train\u df
是我安装ML管道后的原始训练数据,
C5
KMeans
中的
featuresCol

检查错误rdd
如下所示:

check_error_rdd.take(2)
Out[13]: 
[Row(C5=SparseVector(18046, {2398: 1.0, 17923: 1.0, 18041: 1.0, 18045: 0.19}), prediction=0),
 Row(C5=SparseVector(18046, {1699: 1.0, 17923: 1.0, 18024: 1.0, 18045: 0.91}), prediction=0)]
c_center
是集群中心列表,其中每个中心的长度为18046:

print len(c_center[1]) 
18046
我已经计算过了

至于你提到的“慢”:对于100m点,有8192个质心,我花了50分钟计算成本,有64个执行器和202092个分区,在客户端模式下,每台机器有8G内存和6个内核


引述:

计算成本(rdd)

返回K-均值成本(平方和 上此模型的点到其最近中心的距离) 给定数据

参数:rdd–用于计算成本的点的rdd

新版本1.4.0

如果由于数据帧而无法使用此功能,请阅读:



至于你的方法,我一眼就看不出有什么不好的地方。

我会检查一下。感谢它队列已满。超链接的ref链接是旧的。这是新的-@Trigonalaminima非常感谢,答案已更新!从你的稀疏向量中的许多值1.0和大量的零来看,你的数据是原始的KMeans算法在处理此类数据时会遇到许多问题。一种解决方法是在聚类之前使用主成分分析(PCA)或其他一些因子分解/降维技术。