【发布时间】:2016-06-04 02:20:21
【问题描述】:
我有一个想要聚类的单词/短语列表(大约一百万)。我假设它是以下列表:
a_list = [u'java',u'javascript',u'python dev',u'pyspark',u'c ++']
a_list_rdd = sc.parallelize(a_list)
我遵循以下程序:
使用字符串距离(让我们说 jaro winkler 度量)我计算单词列表之间的所有距离,这将创建一个 5x5 矩阵,对角线为 1,因为它计算自身之间的距离。为了计算所有距离,我广播了整个列表。所以:
a_list_rdd_broadcasted = sc.broadcast(a_list_rdd.collect())
以及字符串距离计算:
import jaro
def ComputeStringDistance(phrase,phrase_list_broadcasted):
keyvalueDistances = []
for value in phrase_list_broadcasted:
distanceValue = jaro.jaro_winkler_metric(phrase,value)
keyvalueDistances.append(distanceValue)
return (array(keyvalueDistances))
string_distances = (a_list_rdd
.map(lambda phrase:ComputeStringDistance(phrase,a_list_rdd_broadcasted.value))
)
并使用 K 方法进行聚类:
from pyspark.mllib.clustering import KMeans, KMeansModel
clusters = KMeans.train(string_distances, 3 , maxIterations=10,
runs=10, initializationMode="random")
PredictGroup = string_distances.map(lambda point:clusters.predict(point)).zip(a_list_rdd)
结果:
PredictGroup.collect()
ut[73]:
[(0, u'java'),
(0, u'javascript'),
(2, u'python'),
(2, u'pyspark'),
(1, u'c ++')]
还不错!但是,如果我有 100 万个观测值和大约 10000 个集群的估计值,会发生什么?阅读大量集群的一些帖子确实很昂贵。有没有办法解决这个问题?
【问题讨论】:
标签: apache-spark cluster-analysis pyspark k-means apache-spark-mllib