2016-02-24 119 views
2

元素我怎樣纔能有效地從字符串的RDD隨機選擇一個元素?獲得來自RDD

+0

我做到了,在一些非無意義的方式通過映射RDD到zipWithIndex和使用隨機的。與計數洗牌和拾取索引 –

+2

['takeSample'](https://spark.apache.org/docs/1.5.2/api/scala/index.html#org.apache.spark.rdd.RDD)? –

回答

6

你需要使用takeSample。例如:

val data = sc.parallelize(Range(1,100)) 
// data: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[9] at parallelize at <console>:27 

data.takeSample(false,1) 
// res9: Array[Int] = Array(38) 

data.takeSample(false,1) 
// res10: Array[Int] = Array(72) 

data.takeSample(false,1) 
// res11: Array[Int] = Array(93) 

如果你想獲取相同的「隨機」的元素,您可以修復種子:

data.takeSample(false, 1, seed = 10L) 
// res14: Array[Int] = Array(62) 

data.takeSample(false, 1, seed = 10L) 
// res15: Array[Int] = Array(62) 
+0

我們可以將System.nanoTime.toInt作爲種子嗎? –

+0

你可以使用任何你喜歡的種子。然而種子很長,所以你應該給它一個。我不知道爲什麼@eliasah使用隨機種子,因爲它是[默認值](https://spark.apache.org/docs/1.5.2/api/scala/index.html#org.apache.spark .rdd.RDD)。 –

+0

這是真的@mlk我不確定,因爲我在飛行中編寫代碼。 – eliasah