我的hadoop块大小是128mb,文件是30mb。我运行spark的集群是一个4节点的集群,总共有64个内核。
现在我的任务是运行一个随机森林或梯度推进算法,使用参数网格和3倍交叉验证。
几行代码:
import org.apache.spark.ml.tuning.{ParamGridBuilder, TrainValidationSplit, CrossValidator}
import org.apache.spark.ml.regression.GBTRegressor
val gbt_model = new GBTRegressor().setLabelCol(target_col_name).setFeaturesCol("features").setMaxIter(2).setMaxDepth(2).setMaxBins(1700)
var stages: Array[org.apache.spark.ml.PipelineStage] = index_transformers :+ assembler :+ gbt_model
val paramGrid = new ParamGridBuilder().addGrid(gbt_model.maxIter, Array(100, 200)).addGrid(gbt_model.maxDepth, Array(2, 5, 10)).build()
val cv = new CrossValidator().setEstimator(pipeline).setEvaluator(new RegressionEvaluator).setEstimatorParamMaps(paramGrid).setNumFolds(5)
val cvModel = cv.fit(df_train)
我的文件有很多
输入:10个离散/字符串/字符特征+2个整数特征
输出:一个整数响应/输出变量
在我的集群上运行这个需要4个多小时。我观察到的是,我的代码只在1个节点上运行,只有3个容器。
问题:
我可以在这里做些什么来确保我的代码在所有四个节点上运行,或者使用尽可能多的内核来快速计算。
在划分数据(scala中的dataframe和hadoop集群中的csv文件)以提高速度和计算能力方面,我能做些什么
当做,
1条答案
按热度按时间hyrbngr71#
提交作业时,可以通过参数传递所需的执行者数量
--num-executors
. 您还可以通过指定每个执行器将使用的核心数和内存量--executor-cores
以及--executor-memory
.