用于创建时间间隔的 pyspark 引导操作

pyspark lead operation for creating time intervals

我有一个这样的数据框:

time
First
Second
Third

我想使用 Pyspark 得到这样的输出,我在其中创建一个包含行本身及其后续行的间隔:

time start end
First First Second
Second Second Third
Third ... ....

你有什么建议吗?

您首先需要通过 time 变量对数据帧进行排序,然后您需要创建一个 monotonically_increasing_id 以在已排序的 window 上创建一个 lead 列。

import pyspark.sql.functions as F
from pyspark.sql.window import Window

w = Window().orderBy('id')

df \
  .sort('time') \
  .withColumn('id', F.monotonically_increasing_id()) \
  .withColumn('start', F.col('time')) \
  .withColumn('end', F.lead(F.col('time')).over(w)) \
  .drop('id')

可以通过在 window 函数中使用 last 和 lead 来避免创建更多列和删除它们的痛苦

w = Window.partitionBy().orderBy('time')
df =df.withColumn('Start', last('time').over(w)).withColumn('End', lead('time').over(w))

df.show()