我正在通过火花[[https://spark.apache.org/docs/2.0.0/ml-classification-regression.html#random-forest-classifier]
运行RF模型我的问题是,如果我加载2个不同的数据帧以进行训练和测试,例如:
val Array(trainingData, testData) = Array(convertedVecDF, convertedVecDF_test)
我得到了上面的“ java.util.NoSuchElementException:找不到键:-1.0”,这是错误的原因,但是当我执行以下操作时,我什么也没得到
val data = convertedVecDF.union(convertedVecDF_test)
val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3))
然后运行链接中的代码,即可正常工作。
所有变量的类:数据,convertedVecDF,convertedDF_test,trainingData,testData为Class[_ <: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]] = class org.apache.spark.sql.Dataset
当我像第一种情况一样运行变量时,并使用非常小的测试数据(例如10分),效果很好
那是为什么?似乎是资源访问问题,但我似乎无法理解Spark的工作方式。 如何处理第一种情况?即使用单独的火车/测试数据跑步
编辑
此问题是由于以下原因引起的:Error when passing data from a Dataframe into an existing ML VectorIndexerModel当我转到Spark 2.3.1时,它解决了该问题