PySpark DataFrame-附加单个列的随机排列

PySpark DataFrame-附加单个列的随机排列,dataframe,random,pyspark,Dataframe,Random,Pyspark,我正在使用PySpark(对我来说是新事物)。现在,假设我有下表: +-------+-------+----------+ |Col1 | Col2 |问题| +-------+-------+----------+ |val11 | val12 | q1| |val21 | val22 | q2| |val31 | val32 | q3| +-------+-------+----------+ 我想在它后面添加一个新的列,random_u u quostion,它实际上是Questio

我正在使用PySpark(对我来说是新事物)。现在,假设我有下表:

+-------+-------+----------+
|Col1 | Col2 |问题|
+-------+-------+----------+
|val11 | val12 | q1|
|val21 | val22 | q2|
|val31 | val32 | q3|
+-------+-------+----------+
我想在它后面添加一个新的列,
random_u u quostion
,它实际上是
Question
列中值的排列,因此结果可能如下所示:

+-------+-------+----------+-----------------+
|Col1 | Col2 |问题|随机问题|
+-------+-------+----------+-----------------+
|val11 | val12 | q1 | q2|
|val21 | val22 | q2 | q3|
|val31 | val32 | q3 | q1|
+-------+-------+----------+-----------------+
我试着这样做:
python
df.withColumn(
“随机问题”
,df.orderBy(rand(seed=0))['question']
).createOrReplaceTempView('带有随机问题')
问题是上面的代码确实附加了所需的列,但没有排列其中的值

我做错了什么?我怎样才能解决这个问题

谢谢,


吉拉德

这应该可以做到:

import pyspark.sql.functions as F

questions = df.select(F.col('Question').alias('random_question'))
random = questions.orderBy(F.rand())
为数据帧指定唯一的行id:

df = df.withColumn('row_id', F.monotonically_increasing_id())
random = random.withColumn('row_id', F.monotonically_increasing_id())
通过行id将它们连接起来:

final_df = df.join(random, 'row_id')

谢谢你的回答,这很有效。你能解释一下为什么我的尝试失败了吗?不用担心!我不能100%确定你的尝试失败的原因,我不想在网上发表虚假声明:)