2020-04-27 spark随机采样

2020-04-27  本文已影响0人  破阵子沙场秋点兵

在使用spark.sql(sql)获取dataframe之后使用map函数进行随机负采样时,如果containLabels的类型是可变的Set,那么采样个数会出现随机性,并不受negNum参数限制,而改为ArrayBuffer之后便没有这样的问题。具体原因不知。

import scala.collection.mutable.{ArrayBuffer, Set => MSet}
private def calcNegLabels(containLabels: ArrayBuffer[Long], negNum: Int, itemSkuArr: Array[Long]): Set[Long] = {
    val totalLen = containLabels.length + negNum
    val negLabels = MSet[Long]()
    while (containLabels.length < totalLen) {
      val random = Random.nextInt(itemSkuArr.length)
      if (!containLabels.contains(itemSkuArr(random))) {
        containLabels.+=(itemSkuArr(random))
        negLabels.+=(itemSkuArr(random))
      }
    }
    negLabels.toSet
  }
上一篇下一篇

猜你喜欢

热点阅读