Scala UDF根据不同的概率随机分配值

Scala UDF根据不同的概率随机分配值,scala,apache-spark,apache-spark-sql,user-defined-functions,Scala,Apache Spark,Apache Spark Sql,User Defined Functions,我想创建一个UDF,根据不同的概率随机分配值 在以下示例中,取决于rand返回的值: 0到0.5该值应为A(50%概率) 0.8到1该值应为B(20%概率) 任何其他值应为c(30%概率) val name=数组(“A”、“B”、“C”) 这里没有什么出人意料的事情。调用两次rand函数,得到两个不同的随机值 为两个调用提供相同的种子: sqlContext.range(0, 100) .select( $"id", abs(rand(1)).alias("val")

我想创建一个UDF,根据不同的概率随机分配值

在以下示例中,取决于rand返回的值:

  • 0到0.5该值应为A(50%概率)
  • 0.8到1该值应为B(20%概率)
  • 任何其他值应为c(30%概率)
val name=数组(“A”、“B”、“C”)


这里没有什么出人意料的事情。调用两次
rand
函数,得到两个不同的随机值

为两个调用提供相同的种子:

sqlContext.range(0, 100)
  .select(
    $"id", 
    abs(rand(1)).alias("val"),
    allocate(abs(rand(1))).alias("name") 
  )
或重用该值:

sqlContext.range(0, 100)
  .withColumn("val", abs(rand))
  .withColumn("name", allocate($"val"))

这里没有什么出人意料的事情。调用两次
rand
函数,得到两个不同的随机值

为两个调用提供相同的种子:

sqlContext.range(0, 100)
  .select(
    $"id", 
    abs(rand(1)).alias("val"),
    allocate(abs(rand(1))).alias("name") 
  )
或重用该值:

sqlContext.range(0, 100)
  .withColumn("val", abs(rand))
  .withColumn("name", allocate($"val"))