【问题标题】:How to run GridSearchCV for k-means using spark_sklearn如何使用 spark_sklearn 为 k-means 运行 GridSearchCV
【发布时间】:2018-07-27 09:47:28
【问题描述】:

我正在尝试使用 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)

谢谢!!!

【问题讨论】:

  • 你能提供你的代码吗?
  • @addmeaning 感谢您的帮助。我已经发布了代码的一些相关部分。如果需要,我可以在这里发布整个文件。
  • 代码看起来不错。是不是每个节点都安装了sklearn
  • @addmeaning 是的。我使用 conda 在所有 3 个节点上安装“scikit-learn”,版本为 0.19.1。这提醒了我在master节点上,我也曾使用pip安装scikit-learn(0.19.2),但是如果我卸载这个包,就会出现“no module named sklearn”的错误。 (所以主节点使用 pip scikit-learn 而不是 conda one)
  • 如何初始化集群(从属)?独立?所有机器上的pyspark python驱动版本和路径都设置好了吗?

标签: apache-spark scikit-learn pyspark


【解决方案1】:

非常感谢@addmeaning 和@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 中更改它,然后一切正常。

【讨论】:

    猜你喜欢
    • 2020-07-28
    • 2020-09-12
    • 2016-01-21
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多