Geo*_*ler 3 scala cross-validation apache-spark apache-spark-ml
Pyspark通过提供的可能性很大,以并行的模式交叉验证https://github.com/databricks/spark-sklearn
作为sklearn的简单替换GridSearchCV用
from spark_sklearn import GridSearchCV
Run Code Online (Sandbox Code Playgroud)
如何为Spark的Scala实现类似的功能,CrossValidator即并行化每个折叠?
自火花2.3:
您可以使用创建或创建的setParallelism(n)方法来执行此操作CrossValidator.即:
cv.setParallelism(2)
Run Code Online (Sandbox Code Playgroud)
要么
cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator, \
parallelism=2) // Evaluate up to 2 parameter settings in parallel
Run Code Online (Sandbox Code Playgroud)
在火花2.3之前:
你不能在Spark Scala中做到这一点.您无法在Scala Spark中并行化交叉验证.
如果您已经阅读了spark-sklearn很好的文档,GridSearchCV是并行化的,但模型训练不是.因此,这在规模上是无用的.此外,由于着名的,您可以并行化Spark Scala API的交叉验证SPARK-5063:
RDD转换和操作只能由驱动程序调用,而不能在其他转换内部调用; 例如,rdd1.map(x => rdd2.values.count()*x)无效,因为无法在rdd1.map转换中执行值转换和计数操作.有关更多信息,请参阅SPARK-5063.
摘自README.md:
该软件包包含一些工具,可将Spark计算框架与流行的scikit-learn机器库集成.其他工具包括:
同时训练和评估多个scikit-learn模型.它是scikit-learn中默认包含的多核实现的分布式模拟.将Spark的Dataframes无缝转换为numpy ndarrays或稀疏矩阵.(实验性的)将Scipy的稀疏矩阵作为稀疏向量的数据集进行分配.它侧重于具有少量数据且可以并行运行的问题.
对于小数据集,它使用Spark分配搜索估计器参数(scikit-learn中的GridSearchCV),对于不适合内存的数据集,我们建议在Spark MLlib中使用分布式实现.
注意:此软件包分发简单的任务,如网格搜索交叉验证.它不会分发个人学习算法(与Spark MLlib不同).