我正在探索pyspark和整合scikit-learn与pyspark的可能性。我想使用scikit-learn在每个分区上训练一个模型。这意味着,当我的RDD被定义并分布在不同的工作节点上时,我想使用scikit-learn并在每个工作节点上存在的每个分区上训练一个模型(假设是一个简单的k- means )。由于scikit-learn算法需要一个Pandas数据帧,所以我最初的想法是为每个分区调用toPandas,然后训练我的模型。但是,toPandas函数将DataFrame收集到驱动程序中,这不是我想要的。有没有其他方法可以达到这个目标呢?
发布于 2016-07-04 23:11:12
到目前为止,scikit-learn还不能与spark完全集成,原因是scikit-learn算法并没有实现为分布式,因为它只在一台机器上工作。
然而,您可以在spark-sklearn中找到准备使用Spark - Scikit集成工具,该工具支持(暂时)在Spark上执行GridSearch以进行交叉验证。
编辑
自2020年起,spark-sklearn已被弃用,而joblib-spark是其推荐的继任者。根据文档,您可以轻松地将交叉验证分发到Spark集群,如下所示:
from sklearn.utils import parallel_backend
from sklearn.model_selection import cross_val_score
from sklearn import datasets
from sklearn import svm
from joblibspark import register_spark
register_spark() # register spark backend
iris = datasets.load_iris()
clf = svm.SVC(kernel='linear', C=1)
with parallel_backend('spark', n_jobs=3):
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
print(scores)GridSearchCV也可以以同样的方式分发。
发布于 2018-08-17 13:22:58
不,scikit learn不能与pyspark一起工作&原因是scikit learn是一个可以在单个计算机上工作的软件包,而spark是一个分布式环境。
https://stackoverflow.com/questions/38187637
复制相似问题