random - Pyspark-为可重现值设置随机种子

标签 random pyspark spark-dataframe

我有一个pyspark数据框,我想以重复的方式向其中添加随机值以保证相同的输出。我尝试设置numpy.random.seed和random.seed,但是下面代码的每次执行都会继续生成不同的随机值序列。

 +---+---+---+---+---+
 | 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)

在我对上述解决方案的最新尝试中,我将对random的引用传递给了我的lambda表达式,但是尽管设置了种子,但每次执行时我仍然得到不同的值。有关如何解决此挑战的任何想法或想法?

谢谢您的帮助!

最佳答案

希望这可以帮助!

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

关于random - Pyspark-为可重现值设置随机种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028061/

相关文章:

swift - 具有用户定义范围的随机数

audio - A帧:单击时播放随机声音

apache-spark-sql - Spark将csv列中的空值视为空数据类型

java - 如何确定随机生成的 5 个数字的大小?

c - 使用 Mersenne twister 在 C 中生成随机数

apache-spark - 在pyspark lambda映射函数中使用keras模型

python - 如何通过使用python在spark中使用参数化的多列创建分区?

python - 使用 groupby 或 aggregate 合并 RDD 或 DataFrame 中每个事务中的项目来做 FP-growth

scala - 如何从每一行的列中提取特定元素?

scala - Spark 数据帧中的序列