我正在探索pyspark以及将scikit-learn与pyspark集成的可能性。我想使用scikit-learn在每个分区上训练一个模型。这意味着,当我的RDD被定义并分布在不同的工作节点上时,我想使用scikit-learn并在每个工作节点上存在的每个分区上训练一个模型(比如一个简单的k均值)。由于scikit-learn算法采用Pandas Dataframe ,我最初的想法是为每个分区调用toPandas
,然后训练我的模型。但是,toPandas
函数将DataFrame收集到驱动程序中,这不是我想要的。有没有其他方法可以达到这样的目的?
3条答案
按热度按时间pkbketx91#
scikit-learn目前还不能与spark完全集成,原因是scikit-learn算法不能实现分布式,因为它只能在一台机器上工作。
尽管如此,你可以在spark-sklearn中找到准备好使用Spark的Scikit集成工具,它支持(暂时)在Spark上执行GridSearch进行交叉验证。
编辑
截至2020年,spark-sklearn已被弃用,joblib-spark是它的推荐继任者。根据文档,您可以轻松地将交叉验证分发到Spark集群,如下所示:
字符串
GridSearchCV可以以相同的方式分发。
xwbd5t1u2#
不,scikit learn不能和pyspark一起工作,因为scikit learn是一个可以在个人电脑上工作的软件包,而spark是一个分布式环境。
e3bfsja23#
字符串
从这里开始:
https://spark.apache.org/docs/3.2.0/api/python/getting_started/quickstart_df.html#Applying-a-Function