Apache spark 使用DBSCAN和spark_sklearn对数据进行聚类

Apache spark 使用DBSCAN和spark_sklearn对数据进行聚类,apache-spark,scikit-learn,pyspark,cluster-analysis,dbscan,Apache Spark,Scikit Learn,Pyspark,Cluster Analysis,Dbscan,我想使用DBSCAN和spark_sklearn对输入数据进行集群。我希望在聚类后获得每个输入实例的标签。可能吗 在阅读上的文档时,我尝试了以下方法: temp_data = Spark DataFrame containing 'key' and 'features' columns, where 'features' is a Vector. ke = KeyedEstimator(sklearnEstimator=DBSCAN(), estimatorType=

我想使用DBSCAN和spark_sklearn对输入数据进行集群。我希望在聚类后获得每个输入实例的标签。可能吗

在阅读上的文档时,我尝试了以下方法:

temp_data = Spark DataFrame containing 'key' and 'features' columns, 
            where 'features' is a Vector.

ke = KeyedEstimator(sklearnEstimator=DBSCAN(), estimatorType="clusterer")
print ke.getOrDefault("estimatorType") --> "clusterer"

ke.fit_pedict(temp_data) --> ERROR: 'KeyedEstimator' object has no attribute 'fit_predict'

k_model = ke.fit(temp_data)
print k_model.getOrDefault("estimatorType") --> "clusterer"

k_model.fit_pedict(temp_data) --> ERROR: 'KeyedModel' object has no attribute 'fit_predict'

k_model.predict(temp_data) --> ERROR: 'KeyedModel' object has no attribute 'predict'

k_model.transform(temp_data) --> ERROR: estimatorType assumed to be a clusterer, but sklearnEstimator is missing fit_predict() 
(NOTE: sklearn.cluster.DBSCAN actually have fit_predict() method)
我通常使用sklearn(不带spark)进行拟合(
dbscan\u model.fit(temp\u data-features)
)并从模型中获取标签(
labels=dbscan\u model.labels
)。如果我可以使用spark sklearn获得“labels_uu2;”属性也可以


如果上述调用(“transform”或“predict”)不起作用,是否可以在使用spark sklearn拟合数据后获得“labels”?我该怎么做?假设我们获得了“标签”,我如何将输入实例映射到标签?它们有相同的顺序吗?

对于
KMeans
,我们可以预测聚类标签,因为scikit学习估计器提供了这一功能


不幸的是,对于其他一些集群器,如DBSCAN,情况并非如此。

我已经设法获得了“labels\uux”属性;但是,我仍然不知道结果标签的顺序是否与输入实例相同

temp_data = Spark DataFrame containing 'key' and 'features' columns, 
        where 'features' is a Vector.

ke = KeyedEstimator(sklearnEstimator=DBSCAN())
k_model = ke.fit(temp_data)

def getLabels(model):
    return model.estimator.labels_

labels_udf = udf(lambda x: getLabels(x).tolist(), ArrayType(IntegerType()))("estimator").alias("labels")
res_df = km_dbscan.keyedModels.select("key", labels_udf)

对于DBSCAN,有没有一种方法可以获取输入实例的集群?sckit学习允许访问“标签”属性。@user2737636是的,DBSCAN有一个标签属性,与KMeansAvoid相同,使用软件包装软件包装软件包装软件。。。将层堆叠到层上会降低性能(pyspark已经有了速度慢的名声),并且您无法再获得所有功能。