【发布时间】:2018-08-23 08:25:36
【问题描述】:
我正在使用pyspark 运行Kmeans 算法。输入是长度为 20 的 Vector(文本 verbatims 上的 word2vec 的输出)。然后我转换我的输入dataframe 以获得与每个verbatim 关联的预测中心。
from pyspark.ml.clustering import KMeans
n_centres = 14
kmeans = KMeans().setK(n_centres).setSeed(1)
model = kmeans.fit(df)
df_pred = model.transform(df)
我有以下结果:
df_pred.show()
+--------------------+----------+
| features|prediction|
+--------------------+----------+
|[-0.1879145856946...| 13|
|[-0.4428333640098...| 6|
|[0.00466226078569...| 9|
|[0.09467326601346...| 12|
|[-0.0388545106080...| 5|
|[-0.1805213503539...| 13|
|[0.08455141757925...| 3|
+--------------------+----------+
我想在我的数据框中添加一列,其中包含要素数组与其关联的中心之间的距离。我知道我可以得到中心的坐标,我知道如何计算向量和中心之间的距离:
model.clusterCenters()[3] # to get the coordinates of cluster number 3
v1.squared_distance(center_vect) # euclidean distance between v1 and the center center_vect
但我不知道如何将此计算的结果添加为列。 udf 或 map 似乎是一个解决方案,但我不断收到如下错误:PicklingError: Could not serialize object...。
【问题讨论】: