3

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

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

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

4

2 回答 2

7

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

examples.filter(_ => r.nextInt(100) < 50)
于 2012-08-23T14:50:03.517 回答
0

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

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

当我想要一个 rdd.randomSplit 对应的 Scala 列表或数组时,我发现了这个技巧

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

于 2015-11-16T09:48:35.700 回答