我正在尝试使用"示例" Spark 1.6.1上的RDD方法
scala>val nu = sc.parallelize(1 to 10)
scala>val sp = nu.sample(true,0.2)
scala>sp.collect.foreach(println(_))
3 8
scala>val sp2 = nu.sample(true, 0.2)
scala>sp2.collect.foreach(println(_))
2 4 7 8 10
我无法理解为什么sp2包含2,4,7,8,10。 我认为应该只打印两个数字。 有什么不对吗?
答案 0 :(得分:1)
阐述上一个答案:在documentation(向下滚动到sample
)中提到了(强调我的):
分数:预期样本的大小,作为此RDD大小的一部分,无需替换:选择每个元素的概率;分数必须为[0,1],替换为:预期每个元素的选择次数;分数必须> = 0
'预期'根据具体情况可以有多种含义,但其中一个含义肯定不是“精确”,因此样本大小的确切数量会有所不同。
如果你想要绝对固定的样本大小,你可以使用takeSample
方法,缺点是它返回一个数组(即不是RDD),它必须适合你的主存储器:
val nu = sc.parallelize(1 to 10)
/** set seed for reproducibility */
val sp1 = nu.takeSample(true, 2, 182453)
sp1: Array[Int] = Array(7, 2)
val sp2 = nu.takeSample(true, 2)
sp2: Array[Int] = Array(2, 10)
val sp3 = nu.takeSample(true, 2)
sp2: Array[Int] = Array(4, 6)
答案 1 :(得分:0)
分数并不意味着给我这个元素完全。它说平均给我这么多元素,所以如果你运行几次,你会有不同数量的元素。
答案 2 :(得分:-1)
示例方法,
返回此RDD的采样子集。
返回类型为未记录,因此它可以是您的主RDD中的任何内容。