开发者社区> 问答> 正文

Spark Scala生成随机RDD(1和0)?

如何创建一个填充了数组值的RDD说(0,1) - 将随机1000值填充为1并保持为0。

我知道我可以过滤并做到这一点,但它不是随机的。我希望它尽可能随机

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

展开
收起
flink小助手 2018-12-11 16:51:01 3082 0
1 条回答
写回答
取消 提交回答
  • flink小助手会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关flink的问题及回答。

    使用此代码,您可以创建一个0到1之间随机数的RDD数组:

    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)

    2019-07-17 23:19:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载