Spark Scala Генерация случайных СДР с (1 и 0)? - PullRequest
0 голосов
/ 21 ноября 2018

Как создать RDD, заполненный значениями из массива, скажем (0,1) - заполнить случайные 1000 значений как 1 и оставшиеся 0.

Я знаю, что могу отфильтровать и сделать это, но он выиграл 'быть случайнымЯ хочу, чтобы это было как можно более случайным

var populationMatrix = new IndexedRowMatrix(RandomRDDs.uniformVectorRDD(sc, populationSize, chromosomeLength)

Я исследовал случайные СДР в искре, но смог найти что-то, что соответствует моим потребностям.

1 Ответ

0 голосов
/ 21 ноября 2018

Не совсем уверен, что это то, что вы ищете, но с помощью этого кода вы можете создать массив RDD со случайными числами от 0 до 1 с:

import scala.util.Random

val arraySize = 15 // Total number of elements that you want
val numberOfOnes = 10 // From that total, how many do you want to be ones
val listOfOnes = List.fill(numberOfOnes)(1) // List of 1s
val listOfZeros = List.fill(arraySize - numberOfOnes)(0) // Rest list of 0s
val listOfOnesAndZeros = listOfOnes ::: listOfZeros // Merge lists
val randomList = Random.shuffle(listOfOnesAndZeros) // Random shuffle
val randomRDD = sc.parallelize(randomList) // RDD creation
randomRDD.collect() // Array[Int] = Array(1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1)

Или, если вы хотитеиспользуйте только RDD:

val arraySize = 15
val numberOfOnes = 10

val rddOfOnes = spark.range(numberOfOnes).map(_ => 1).rdd
val rddOfZeros = spark.range(arraySize - numberOfOnes).map(_ => 0).rdd
val rddOfOnesAndZeros = rddOfOnes ++ rddOfZeros
val shuffleResult = rddOfOnesAndZeros.mapPartitions(iter => {
  val rng = new scala.util.Random()
  iter.map((rng.nextInt, _))
}).partitionBy(new org.apache.spark.HashPartitioner(rddOfOnesAndZeros.partitions.size)).values

shuffleResult.collect() // Array[Int] = Array(0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)

Дайте мне знать, если это было то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...