用pyspark编写kmeans时,每次迭代过程最后那的collect行动算子都会占用我大量的运行时间,有什么办法可以解决吗

while bool( 1-np.array_equal(oldCentroids,centroids) ): #新的聚类点和旧的聚类点不相等时候执行
    oldCentroids = centroids[:] #获取聚类中心点
    pointCentroidPair = data.map(lambda line: (closestPoint(line, centroids), (line,1)) ) #为每个点分配聚类中心点
    clusterSum = pointCentroidPair.reduceByKey(addPoints).sortByKey() #把同一个类中的点做聚合
    centroids = np.array(clusterSum.map(lambda x: ( x[1][0]/float(x[1][1]) ) ).collect()) #得到新的聚类中心

算法在最后一行代码的末尾耗费了大量时间,就是collect行动算子那里,把新的聚类中心点采集到到driver端,这个算法要是迭代150次的话,就要执行150次collect。有知道有什么办法可以帮我解决一下这个难题吗吗

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。