2017-09-03 12 views
1

同じ出力を保証するためにランダム値を繰り返して追加したいpysparkデータフレームがあります。私はnumpy.random.seedとrandom.seedを設定しようとしましたが、以下のコードを実行するたびにさまざまな乱数列が生成され続けます。Pyspark - 再現可能な値のランダムシードを設定する

+---+---+---+---+---+ 
| 7 | 15| 19| 21| 27| 
+---------------+---+ 
| 0 | 1| 0| 0| 0| 
| 0 | 0| 0| 1| 0| 
| 0 | 0| 0| 1| 0| 
| 2 | 0| 0| 0| 0| 
| 4 | 0| 3| 0| 0| 
| 5 | 0| 25| 0| 0| 
| 6 | 2| 0| 0| 0| 

はここに私の現在の実装です:上記の解決策で私の最新の試みで

import random 
import numpy as np 

#set seed 
random.seed(1234) 
np.random.seed(1234) 

#create dataframe 
df = sc.parallelize([ 
[ 0, 1, 0, 0, 0], 
[ 0, 0, 0, 1, 0], 
[ 0, 0, 0, 1, 0], 
[2, 0, 0, 0, 0], 
[0, 3, 0, 0, 0], 
[ 0, 25,0, 0, 0], 
[2, 0, 0, 0, 0], 
]).toDF(('7', '15', '19', '21', '27')) 

random_df = data.select("*").rdd.map(
     lambda x, r=random: [Row(float(r.random() + row)) for row in x]).toDF(data.columns) 

、私は私のラムダ式にランダムへの参照を渡すが、私はまだ設定にもかかわらず、それぞれの実行と異なる値を取得します種子。どのようにこの挑戦を解決するための考えやアイデア?

ありがとうございました!

答えて

2

希望すると便利です。

from pyspark.sql.functions import col, rand 
random_df = df.select(*((col(c) + rand(seed=1234)).alias(c) for c in df.columns)) 
+0

これは素晴らしいです!助けてくれてありがとう! –

+0

助けてくれてうれしい! – Prem

関連する問題