如何使用spark_sklearn为k均值运行GridSearchCV

时间:2018-07-25 08:23:45

标签: apache-spark scikit-learn pyspark

我正在尝试使用spark_sklearn中的GridSearchCV来加快3节点Spark群集上的拟合过程。但是,当我致电.fit()时,出现了一些pickle.loads(obj)错误,我认为主要的问题是以下

  

ImportError:没有名为sklearn.cluster.k_means _

的模块

如果我以本地模式提交任务,则一切正常。看来集群模式未使用正确版本的gridsearchcv或sklearn是从集群模式下的两个工人的不同路径导入的。有人可以帮我吗?

spark_sklearn:2.3.1

代码中最相关的部分如下:

    import spark_sklearn
    from spark_sklearn import GridSearchCV
    ....some code for spark context, data reading and preparation....
    parameters = {"n_clusters":[d/2,d],"max_iter":[100,200]}
    km = KMeans(init='k-means++')
    grid = GridSearchCV(sc, km, cv=5, param_grid = parameters, scoring = 
    silhouette)

    grid.fit(X_train,y_train)

谢谢!

1 个答案:

答案 0 :(得分:1)

非常感谢@add含义和@Vivek Kumar,我终于找到了问题所在。似乎pyspark.python意外指向了不同的路径,因此python使用的软件包是不同的(也有sklearn)。它在本地模式下而不是集群模式下工作的原因是,在这两种模式下,python解释器是不同的。因此,我在/conf/spark-defaults.conf中指定了集群模式应使用的解释器

spark.pyspark.python=/path/to/my/interpreter

或者您可以将pyspark.python = / path / my / interpreter添加到/ etc / profile中,或者在spark_env.sh中对其进行更改,然后一切正常。