Apache spark 如何将值从每个用户id的第一行的列复制到同一用户id的第二行

Apache spark 如何将值从每个用户id的第一行的列复制到同一用户id的第二行,apache-spark,pyspark,pyspark-dataframes,Apache Spark,Pyspark,Pyspark Dataframes,我有以下pyspark数据帧: +-------+---------------------+---+----------+--------------+ |user_id| product | rn|Product_Mo|First_Purchase| +-------+---------------------+---+----------+--------------+ | 246981|6 month subscription | 1| 6|

我有以下pyspark数据帧:

+-------+---------------------+---+----------+--------------+
|user_id|             product | rn|Product_Mo|First_Purchase|
+-------+---------------------+---+----------+--------------+
| 246981|6 month subscription |  1|         6|          null|
| 246981|12 month subscription|  2|        12|          null|
| 249357|6 month subscription |  1|         6|          null|
| 249357|3 month subscription |  2|         3|          null|
| 243532|6 month subscription |  1|         6|          null|
| 243532|3 month subscription |  2|         3|          null|
| 257345|6 month subscription |  1|         6|          null|
| 257345|2 month subscription |  2|         2|          null|
| 256355|6 month subscription |  1|         6|          null|
| 256355|12 month subscription|  2|        12|          null|
| 246701|6 month subscription |  1|         6|          null|
| 246701|12 month subscription|  2|        12|          null|
| 254082|6 month subscription |  1|         6|          null|
| 254082|12 month subscription|  2|        12|          null|
| 239210|6 month subscription |  1|         6|          null|
| 239210|12 month subscription|  2|        12|          null|
| 247518|6 month subscription |  1|         6|          null|
| 247518|12 month subscription|  2|        12|          null|
+-------+---------------------+---+----------+--------------+
我需要捕捉产品的价值,其中rn=1,并将其复制到第一次购买,其中rn=1和rn=2。 这将允许我以后在首次购买时执行groupby,并统计所有首次购买和第二次购买,其中首次购买6个月的订阅

生成的数据帧应如下所示:

+-------+---------------------+---+----------+--------------+
|user_id|             product | rn|Product_Mo|First_Purchase|
+-------+---------------------+---+----------+--------------+
| 246981|6 month subscription |  1|         6|             6|
| 246981|12 month subscription|  2|        12|             6|
| 249357|6 month subscription |  1|         6|             6|
| 249357|3 month subscription |  2|         3|             6|
| 243532|6 month subscription |  1|         6|             6|
| 243532|3 month subscription |  2|         3|             6|
| 257345|6 month subscription |  1|         6|             6|
| 257345|2 month subscription |  2|         2|             6|
| 256355|6 month subscription |  1|         6|             6|
| 256355|12 month subscription|  2|        12|             6|
| 246701|6 month subscription |  1|         6|             6|
| 246701|12 month subscription|  2|        12|             6|
| 254082|6 month subscription |  1|         6|             6|
| 254082|12 month subscription|  2|        12|             6|
| 239210|6 month subscription |  1|         6|             6|
| 239210|12 month subscription|  2|        12|             6|
| 247518|6 month subscription |  1|         6|             6|
| 247518|12 month subscription|  2|        12|             6|
+-------+---------------------+---+----------+--------------+
我还没有弄清楚如何为rn=1的产品获取价值,并将其复制到rn=1和rn=2的第一次购买中。rn=1的乘积在后续循环中可能会发生变化。所以我需要复制那个值,不管它是什么。它不会永远是6


我希望这是有意义的。感谢您的建议。

窗口上使用
first
功能
用户id进行分区
并按
rn
排序

from pyspark.sql import Window
from pyspark.sql.functions import *

w = Window.partitionBy('user_id').orderBy('rn')
df.withColumn('First_Purchase', first('Product_Mo').over(w))

第一个是要导入的函数吗<代码>名称错误从pyspark.sql导入窗口2 w=Window.partitionBy('p_paid_用户id').orderBy('rn')--->3 df.withColumn('First_Purchase',First('Product_Mo')。over(w))名称错误:未定义名称“First”仅导入pyspark函数