将scikit-learn与pyspark集成

rqdpfwrv  于 2023-08-02  发布在  Spark
关注(0)|答案(3)|浏览(114)

我正在探索pyspark以及将scikit-learn与pyspark集成的可能性。我想使用scikit-learn在每个分区上训练一个模型。这意味着,当我的RDD被定义并分布在不同的工作节点上时,我想使用scikit-learn并在每个工作节点上存在的每个分区上训练一个模型(比如一个简单的k均值)。由于scikit-learn算法采用Pandas Dataframe ,我最初的想法是为每个分区调用toPandas,然后训练我的模型。但是,toPandas函数将DataFrame收集到驱动程序中,这不是我想要的。有没有其他方法可以达到这样的目的?

pkbketx9

pkbketx91#

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可以以相同的方式分发。

xwbd5t1u

xwbd5t1u2#

不,scikit learn不能和pyspark一起工作,因为scikit learn是一个可以在个人电脑上工作的软件包,而spark是一个分布式环境。

e3bfsja2

e3bfsja23#

def pandas_filter_func(iterator):
    for pandas_df in iterator:
        yield pandas_df[pandas_df.a == 1]

df.mapInPandas(pandas_filter_func, schema=df.schema).show()

字符串
从这里开始:
https://spark.apache.org/docs/3.2.0/api/python/getting_started/quickstart_df.html#Applying-a-Function

相关问题