我知道这不是很重要,但我想知道是否可以节省两行代码。
我有一个数据集 inputData,我想将其分成两部分。我正在使用数据集类的 randomSplit 方法。但是,我被迫使用三行代码来执行此操作:
val sets = inputData.randomSplit(Array[Double](0.7, 0.3), 18)
val training = sets(0)
val test = sets(1)
理想情况下,我想做类似的事情
val (training, test) = inputData.randomSplit(Array[Double](0.7, 0.3), 18)
但是由于错误,此代码无法编译:
Error:(146, 13) constructor cannot be instantiated to expected type;
found : (T1, T2)
required: Array[org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]]
有可能实现我想要的吗?
最佳答案
模式匹配数组:
val Array(training, test) = inputData.randomSplit(Array[Double](0.7, 0.3), 18)
或更长(但仍然是单个表达式)
val (training, test) = inputData.randomSplit(Array[Double](0.7, 0.3), 18) match {
case Array(training, test) => (training, test)
}
请记住,编译器无法对其进行验证,并且可能会在运行时失败并出现 MatchError
。
关于scala - 在 scala Spark 中将训练和测试中的数据集拆分为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45755139/