繁体   English   中英

在Scala中随机拆分数组

[英]Splitting an array at random in Scala

我正在Scala中构建一个决策树系统,但我的数据中的一些条目具有相同的属性。 我通过实现一个“随机”节点类型来解决这个问题,允许查询随机选择要遍历的分支,但是当我尝试随机分割剩余的例子时,我得到一个“MatchError”。 我目前的代码:

def splitRandom(examples: Array[String]): Array[String]={
        examples.collect {case x if(r.nextInt(100) < 50) => x}
}

“examples”是一个字符串数组,每个字符串都是一行,包含一个包含所有属性的数据条目。

collect不是随机行为的好选择,因为相同的条件可以被评估两次(首先在isDefinedAt ,然后第二次计算值); 如果它第一次说真,假第二次 - 在同一输入 - 匹配将被打乱。 请改用filter

examples.filter(_ => r.nextInt(100) < 50)

有一个适合您的问题的解决方案:

import util.Random
val shuffled = Random.shuffle(your_array)
val (first, second) = shuffled.splitAt(your_position)

当我想要一个scd List或Array的rdd.randomSplit对应物时,我发现了这个技巧

如果需要,您可以进行一些类型转换

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM