【发布时间】:2022-01-13 08:36:57
【问题描述】:
我正在尝试构建时间线,并且我希望能够检测到时间线中断。我有这个测试df:
| ID | date |
|---|---|
| 1 | 2012-12-01 |
| 1 | 2012-12-02 |
| 1 | 2012-12-03 |
| 1 | 2012-12-05 |
| 1 | 2012-12-06 |
| 1 | 2012-12-07 |
| 1 | 2012-12-10 |
| 1 | 2012-12-11 |
我想得到一个开始结束日期的时间表,如下所示:
| ID | date | end |
|---|---|---|
| 1 | 2012-12-01 | 2012-12-03 |
| 1 | 2012-12-05 | 2012-12-07 |
| 1 | 2012-12-10 | 2012-12-11 |
我一直在尝试:
columns = ['id','snapshot_date']
data = [
('1','2012-12-01'),
('1','2012-12-02'),
('1','2012-12-03'),
('1','2012-12-05'),
('1','2012-12-06'),
('1','2012-12-07'),
('1','2012-12-10'),
('1','2012-12-11')]
dftest = spark.createDataFrame(data).toDF(*columns)
w1 = Window.partitionBy('id').orderBy(F.col('date'))
df2 = (df1.withColumn("group_date", F.when( ~(F.date_add(F.col('snapshot_date'), -1) == F.lag(F.col("snapshot_date"), 1, 0).over(w1)), F.lit(1)).otherwise(F.lit(0))).filter(F.col('group_date')>1)
但不确定如何获得正确的结束日期
【问题讨论】:
标签: sql apache-spark