我试图找出一个最好的方法,将1到N之间的一个数字随机分配给一行,使得每行都是不同的。(N是数据集中的行数。行数可能是10M以上,所以这可能不是方法)。
最初的想法是使用udf生成一个数组,但我不确定如何将数组的每个索引分配给一行。
def create_rand_range(end):
return list(random.sample(range(1, end), end-1))
示例:n = 3 create_兰德_range = [3,1,2]
数据表输出:
| Col 1 | Rand_Output |
|-------|-------------|
| A | 3 |
| B | 1 |
| C | 2 |
任何帮助都很好。
3条答案
按热度按时间8fq7wneg1#
下面是几个为行指定编号的示例。
选项#1:使用monotonically_increasing_id()函数。
选项2:使用窗口函数
14ifxucb2#
你可以用udf这样做:
然后使用以下udf定义新列:
uyhoqukh3#
来自pyspark.sql.functions的ran()函数生成0和1之间的均匀随机输出。为了将该分布转换为集合{1,2,...,N}上的均匀离散分布,只需将随机均匀输出乘以N,然后取地板函数。