我正在尝试在以下架构的DataFrame上安装ML Cross Validator:
root
|-- userID: string (nullable = true)
|-- features: vector (nullable = true)
|-- label: double (nullable = true)
当我适合CrossValidator时,我得到java.lang.UnsupportedOperationException: empty.maxBy
。
我已经阅读了this错误报告,它说这个异常发生在没有feautres:
如果是空功能,我们会失败并显示更好的错误消息: DecisionTree需要多少个功能> 0,但被赋予了空特征向量 而不是神秘的错误消息: java.lang.UnsupportedOperationException:empty.max
在我的情况下,我确实有数以千计的功能,所以我确信功能DataFrame不是空的。
这种例外可能是另一个原因?
我正在EMR上运行群集,如果这有帮助(DataFrame名称为featuresDF
,在我符合CrossValidator
之前,我确认没有空功能):
val rf = new RandomForestClassifier()
.setLabelCol("label")
.setFeaturesCol("features")
val pipeline = new Pipeline().setStages(Array(rf))
val paramGrid = new ParamGridBuilder()
.addGrid(rf.numTrees, Array(500, 1000))
.addGrid(rf.maxDepth, Array(15, 25))
.build()
val evaluator = new BinaryClassificationEvaluator()
.setLabelCol("label")
.setMetricName("areaUnderPR")
val cv = new CrossValidator()
.setEstimator(pipeline)
.setEvaluator(evaluator)
.setEstimatorParamMaps(paramGrid)
.setNumFolds(3)
val model = cv.fit(featuresDF)