在Spark RDD中对指定的簇相等的值求和

时间:2016-04-10 05:47:53

标签: python apache-spark pyspark k-means rdd

我有一个PySpark程序,它描述变量并使用Spark Word2Vec模型将描述转换为向量,然后使用KMeans对这些向量进行聚类,以便对希望描述同一事物的描述进行分组。

但是,数据集中有许多重复项。我对原始数据集进行了重复数据删除,但保留了一个计数,其中包含最初存在该描述的重复数量的每个唯一行。

在对描述向量进行聚类之后,我将结果rdd压缩回带有描述的数据集。我想根据映射到该集群的数据总条目数来订购集群。所以,最终的RDD看起来像这样:

[([companyid=u'xxxxxxxx', variableid=u'prop11', description=u'payment method',duplicateCount=u'8', word2vecOutput=DenseVector([.830574, 1.96709, -0.86785,......])], clusterID=793]

群集已分离,因为它已压缩回W2V rdd。 我想找到一种方法来聚合所有duplicateCount值,并创建一个有序列表,其中包含一个clusterID,其中包含原始行的总数(在重复数据删除之前),按原始行总数排序。

看起来这对于简单的聚合函数来说应该很容易,但无论出于何种原因,我都很难绕过它。

感谢您的帮助

编辑:

为了澄清,在我的RDD的每一行中,都有一个标记为duplicateCount的数字。还有另一个标记为cluster的元素。我试图编写一个函数来汇总clusterCount所在的duplicateCount,从而为每个集群提供一个totalCount。

例如,4个元素可能被分组到集群10.但是,第一个元素的duplicateCount可能为5,第二个元素的duplicateCount为37,等等(仍然在集群10中)。我想总结每个集群中的重复项,以便获得集群的实际大小。

我认为W2V和KMeans会为我想要它的原因提供有用的背景,但显然它只是让问题混乱

0 个答案:

没有答案