如何在Spark中创建距离矩阵以实现Kmeans算法

2024-05-16 04:34:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Spark非常陌生,我正在尝试实现Kmeans算法,根据名称之间的相似性对一组名称进行聚类,但为了理解模型的预测,我需要一个数据帧/矩阵,我无法单独使用Spark来重现该数据帧/矩阵,到目前为止,我必须创建熊猫DF并将其转换为Spark DF。我被告知,对于未来数据集的规模而言,这不是正确的方法

因此,这里或多或少是我所拥有的:

我有以下一组名称,这是一个小样本,但我使用它作为练习,看看一旦我使用了更大的真实数据集,它的行为如何

df = spark.createDataFrame(["GERMAN", "GERMANY", "GERMANIA", "LENOVO"], "string").toDF("Name")
df.show()

+--------+
|    Name|
+--------+
|  GERMAN|
| GERMANY|
|GERMANIA|
|  LENOVO|
+--------+

我为计算每个单词之间的相似性而定义的自定义项是:

lcs_udf = udf(lambda w, v :  1 - metric_lcs.distance(w, v), FloatType())

我正在尝试使用这个函数并生成一个数据框,该数据框将给我每个可能的词对之间的相似性,它本质上是一个对角矩阵,理想情况下看起来像这样:

+--------+--------+---------+----------+--------+
|    Name| GERMAN | GERMANY | GERMANIA | LENOVO |
+--------+--------+---------+----------+--------+
|  GERMAN|    1   |   ..... |   .....  |  ...   |
| GERMANY|   .... |    1    |    ....  |  ....  | 
|GERMANIA|   .... |   ....  |     1    |  ....  |
|  LENOVO|   .... |    .... |    ....  |    1   |
+--------+--------+---------+----------+--------+

有了这个DF,我可以实现任何问题的模型。因此,任何帮助都将不胜感激 谢谢


Tags: 数据name模型名称df矩阵相似性spark