value of another column that is the same row as my last lag value

I have a timeseries dataset and am looking to make a new column that represents the last reported values (not null). I think I have this part figured out, using a combination of lag and last

I would also like to know the timestamp for that last reported (non null) value. note:I never expect timestamp_ms to be null.

Sample Data

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>df = spark.createDataFrame([
Row(timestamp_ms=1672531200000, val='19'),
Row(timestamp_ms=1672532100000, val='20'),
Row(timestamp_ms=1672533000000, val=None),
Row(timestamp_ms=1672533900000, val='22'),
Row(timestamp_ms=1672534800000, val=None),
Row(timestamp_ms=1672535700000, val=None),
Row(timestamp_ms=1672536600000, val='25'),
Row(timestamp_ms=1672537500000, val='20'),
Row(timestamp_ms=1672538400000, val='27')
])
df.show()
</code>
<code>df = spark.createDataFrame([ Row(timestamp_ms=1672531200000, val='19'), Row(timestamp_ms=1672532100000, val='20'), Row(timestamp_ms=1672533000000, val=None), Row(timestamp_ms=1672533900000, val='22'), Row(timestamp_ms=1672534800000, val=None), Row(timestamp_ms=1672535700000, val=None), Row(timestamp_ms=1672536600000, val='25'), Row(timestamp_ms=1672537500000, val='20'), Row(timestamp_ms=1672538400000, val='27') ]) df.show() </code>
df = spark.createDataFrame([
    Row(timestamp_ms=1672531200000, val='19'),
    Row(timestamp_ms=1672532100000, val='20'),
    Row(timestamp_ms=1672533000000, val=None),
    Row(timestamp_ms=1672533900000, val='22'),
    Row(timestamp_ms=1672534800000, val=None),
    Row(timestamp_ms=1672535700000, val=None),
    Row(timestamp_ms=1672536600000, val='25'),
    Row(timestamp_ms=1672537500000, val='20'),
    Row(timestamp_ms=1672538400000, val='27')
])
df.show()

Sample Code
Returns the Last Lagged Value and attempts to return the timestamp when that value was reported.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>df_lag = df.withColumn("lag_prev_val", F.lag("val")
.over(Window.partitionBy()
.orderBy("timestamp_ms"))
)
.withColumn("last_lag_prev_val", F.last("lag_prev_val", True)
.over(Window.partitionBy()
.orderBy("timestamp_ms"))
)
.withColumn("last_lag_prev_time", F.lag("timestamp_ms")
.over(Window.partitionBy()
.orderBy("timestamp_ms"))
)
df_lag.show()
</code>
<code>df_lag = df.withColumn("lag_prev_val", F.lag("val") .over(Window.partitionBy() .orderBy("timestamp_ms")) ) .withColumn("last_lag_prev_val", F.last("lag_prev_val", True) .over(Window.partitionBy() .orderBy("timestamp_ms")) ) .withColumn("last_lag_prev_time", F.lag("timestamp_ms") .over(Window.partitionBy() .orderBy("timestamp_ms")) ) df_lag.show() </code>
df_lag = df.withColumn("lag_prev_val", F.lag("val")
                                    .over(Window.partitionBy()
                                    .orderBy("timestamp_ms"))
                         )
            .withColumn("last_lag_prev_val", F.last("lag_prev_val", True)
                                    .over(Window.partitionBy()
                                    .orderBy("timestamp_ms"))
                         )
            .withColumn("last_lag_prev_time", F.lag("timestamp_ms")
                                .over(Window.partitionBy()
                                .orderBy("timestamp_ms"))
                     )
df_lag.show()

Current Output

last_lag_prev_time represents the previously reported timestamp, rather than the timestamp associated with the last_lag_prev_val

timestamp_ms val lag_prev_val last_lag_prev_val last_lag_prev_time
1672531200000 19 null null null
1672532100000 20 19 19 1672531200000
1672533000000 null 20 20 1672532100000
1672533900000 22 null 20 1672533000000
1672534800000 null 22 22 1672533900000
1672535700000 null null 22 1672534800000
1672536600000 25 null 22 1672535700000
1672537500000 20 25 25 1672536600000
1672538400000 27 20 20 1672537500000

Ideal output

The output I want (bolded the differences) is for the last_lag_prev_time column to represent the timestamp_ms value that is from the same row as the original val that was used to populate `last_lag_prev_val’

timestamp_ms val lag_prev_val last_lag_prev_val last_lag_prev_time
1672531200000 19 null null null
1672532100000 20 19 19 1672531200000
1672533000000 null 20 20 1672532100000
1672533900000 22 null 20 1672532100000
1672534800000 null 22 22 1672533900000
1672535700000 null null 22 1672533900000
1672536600000 25 null 22 1672533900000
1672537500000 20 25 25 1672536600000
1672538400000 27 20 20 1672537500000

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật