在使用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
}
网友评论