我想计算1轮K-Means。 我有k个中心,我只想让输入的每个点知道谁是最接近它的中心 另外,我想知道距离的平方和(K-Means的成本)。
代码如下:
points = sc.textFile("s3_url",20).map(parseVector).cache()
closest = points.map(lambda p: (distanceToClosest(p, means)))
cost = closest.reduce(lambda a, b: a+b)
means
变量是硬连线的。
parseVector
就是这样:
def parseVector(line):
return np.fromstring(line, dtype=np.float64, sep=" ")
和distanceToClosest是:
def distanceToClosest(p, centers):
closest = float("+inf")
for i in range(len(centers)):
tempDist = np.sum((p - centers[i]) ** 2)
if tempDist < closest:
closest = tempDist
return closest
我的输入只有5GB而且我使用的是10个内核,而且这个简单的操作需要10 + min!当我期待1分钟时