apache-spark - 如何在 pyspark 中创建新列,其中条件取决于列的后续值?
问题描述
我有以下 pyspark 数据框。如下图所示,我需要从 Value1 列创建 Value2 列。问题是对于所有具有相同时间值的行,Value2列中的值需要是Value1中与该时间对应的第一个值。因此,如果您查看时间为 16:07 的所有行的图片,则该值需要为 100。我知道我需要使用某种形式的条件,但我不知道该怎么做,所以我是想知道是否有人能指出我正确的方向。
data={
‘Name’:[‘John’,’Kate’,’William’,’Andrew’,’Nicole’,’Nicola’,’Gavin’,’Gabriel’, ‘John’,’Kate’,’William’,’Andrew’,’Nicole’,’Nicola’,’Gavin’,’Gabriel’],
’Value1’:[10,20,50,60,100,200,250,300,450,520,570,600,630,670,690,700,720],
’Time’:[‘ 15/06/2020 16:05:00’, ‘ 15/06/2020 16:05:00’, ‘ 15/06/2020 16:05:00’, ‘ 15/06/2020 16:06:00’, ‘ 15/06/2020 16:07:00’, ‘ 15/06/2020 16:07:00’, ‘ 15/06/2020 16:08:00’, ‘ 15/06/2020 16:09:00’, ‘ 15/06/2020 16:10:00’, ‘ 15/06/2020 17:20:00’, ‘ 15/06/2020 17:21:00’, ‘ 15/06/2020 17:22:00’, ‘ 15/06/2020 17:22:00’, ‘ 15/06/2020 17:22:00’, ‘ 15/06/2020 17:22:00’, , ‘ 15/06/2020 17:25:00’, , ‘ 15/06/2020 17:26:00’}
df=pd.DataFrame(data)
df_spark=spark.createDataFrame(df)
解决方案
试试窗口函数。您在“时间”列定义的窗口中获得最小值 1:
from pyspark.sql import Window
window = Window.partitionBy('Time')
df_spark.withColumn('Value2', min('Value1').over(window))