在训练中拆分数据集并在scala spark中以一行进行测试

时间:2017-08-18 11:03:47

标签: scala apache-spark

这不是一个非常重要的观点,我知道,但我想知道我是否可以保存两行代码。

我有一个数据集inputData,我想分成两部分。我正在使用数据集类的randomSplit方法。但是,我被迫使用三行代码来执行此操作:

    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]]

但是由于错误而导致此代码无法编译:

    [RequireClaim("ClaimType",Value = "RequiredValue")]
    public IActionResult Action(){}

有可能实现我想要的目标吗?

1 个答案:

答案 0 :(得分:2)

模式匹配数组:

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运行时可能会失败。