scala - 在 scala Spark 中将训练和测试中的数据集拆分为一行

标签 scala apache-spark

我知道这不是很重要,但我想知道是否可以节省两行代码。

我有一个数据集 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/

相关文章:

java - 使用大量列在 Scala 中转换数据框行

scala - 保持数据库 session 打开

scala - HBase Spark - 与 Spark 2.0 的连接

apache-spark - IllegalArgumentException : Column must be of type struct<type:tinyint,大小:int,索引:array<int>,值:array<double>> but was actually double.'

apache-spark - 为什么 Spark 会选择在单个节点上完成所有工作?

python - 将日期列转换为时间戳列 + 小时的最有效方法

java - BigQuery - 如何在 Java 客户端库中设置读取超时

Scala,jar 文件的问题

scala - .parallelize(...) 是 Apache Spark 中的惰性操作吗?

java - 如何解决 AnalysisException : resolved attribute(s) in Spark