我正在尝试使用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)
谢谢!
答案 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中对其进行更改,然后一切正常。