当前位置: 首页 > 知识库问答 >
问题:

PySpark:使用行的主键作为rand[重复]的种子

魏朗
2023-03-14

我正在尝试使用PySpark中的rand函数生成一个带有随机数的列。我希望rand函数将行的主键作为种子,这样数字是可复制的。但是,当我跑的时候:

df.withColumn('rand_key', F.rand(F.col('primary_id')))

共有1个答案

滕夜洛
2023-03-14

使用f.rand(seed)函数的问题是,它需要长seed参数,并将其视为文字(静态)。

解决这个问题的一种方法是创建自己的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|
+---+---+-------------------+
 类似资料:
  • 问题内容: 如何使用复合主键作为外键?看来我的尝试无效。 问题答案: 该行: 是错的。您不能那样使用,这只是父表中PK约束的名称。要将复合主键用作外键,您必须向子表中添加相同数量(组成PK)的相同数据类型的列,然后在定义中使用这些列的组合:

  • 如何将复合主键用作外键?看来我的尝试没有成功。

  • 我有一些实体: 当我试图保存新的cbonus记录时,出现异常: org.postgresql.util.PSQLException: ERROR: null值在列"bank_id"的关系"cBonus"违反了非空约束详细信息:失败的行包含(773, gp3, null, null, f)。 和查询 DEBUG 24817-[nio-8080-exec-4]org . hibernate . SQL

  • 问题内容: 我在使用LOAD DATA INFILE命令时遇到了一些麻烦,因为我想忽略数据库中已经存在的行。如果说我的数据表如下, 其中id是自动递增值。我拥有的csv文件包含以下数据, 我想忽略这些行, 并将其余的上传到表格中。我尚未将所有内容上传到表的查询如下, 请帮助我完成此任务。。将不胜感激..我尝试了许多链接,但没有帮助:( 问题答案: 在年龄列上创建一个唯一索引,然后:

  • 我希望将变量插入到对象键结构中,但我只得到变量名,而不是变量值。

  • 它应该允许独立地更新表,并在父行被删除时删除子行。