0

異なる確率で値をランダムに割り当てるUDFを作成したいとします。ランドによって返される値に依存し、以下の例で異なる確率に基づいてランダムに値を割り当てるUDF

  • 0〜0.5の値は、(50%の確率)であるべきである
  • 0.8〜1の値は、B(20%の確率であるべきです)
  • 値はC(30%の確率)

val names = Array("A", "B", "C")

べきである何か

しかし、結果を印刷するとき、名前はUDFで定義されたルールに基づいて割り当てられません。

+---+----+----+ 
| id| val|name| 
+---+----+----+ 
| 0|0.17| C| => should be A 
| 1|0.12| A| 
| 2|0.36| A| 
| 3|0.56| B| 
| 4|0.82| A|=> should be C 

答えて

3

ここでは何も起こりません。 rand関数を2回呼び出すと、2つの異なるランダム値が得られます。

両方ともコールの同じシード提供する:

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")) 
関連する問題