我正在尝试使用PySpark中的rand函数生成具有随机数的列。我希望rand函数将行的主键作为种子,以便数字可复制。但是,当我运行时:
df.withColumn('rand_key', F.rand(F.col('primary_id')))
我收到错误
TypeError:“列”对象不可调用
如何将行中的值用作兰德种子?
答案 0 :(得分:1)
使用F.rand(seed)
函数的问题是它需要很长的seed
参数和treats it as literal(静态)。
解决此问题的一种方法是创建自己的rand
函数,该函数将column作为参数:
import random
def rand(seed):
random.seed(seed)
return random.random()
from pyspark.sql.functions import udf
from pyspark.sql.types import DoubleType
rand_udf = udf(rand, DoubleType())
df = spark.createDataFrame([(1, 'a'), (2, 'b'), (1, 'c')], ['a', 'b'])
df.withColumn('rr', rand_udf(df.a)).show()
+---+---+-------------------+
| a| b| rr|
+---+---+-------------------+
| 1| a|0.13436424411240122|
| 2| b| 0.9560342718892494|
| 1| c|0.13436424411240122|
+---+---+-------------------+