Pyspark 滞后函数返回 null
Pyspark Lag function returning null
我有一个看起来像这样的数据框
>>> df.show()
+----------------------+------------------------+--------------------+
|date_cast |id | status |
+----------------------+------------------------+--------------------+
| 2021-02-20| 123... |open |
| 2021-02-21| 123... |open |
| 2021-02-17| 123... |closed |
| 2021-02-22| 123... |open |
| 2021-02-19| 123... |open |
| 2021-02-18| 123... |closed |
+----------------------+------------------------+--------------------+
我一直在尝试对其应用一个非常简单的滞后以查看其前一天的状态,但我一直得到空值。日期是一个字符串,所以我投了,我想这可能是由于日期未在结果中排序的问题。我还在我的 over partition by 中对窗口进行了硬编码,但仍然为空。
df_lag = df.withColumn('lag_status',F.lag(df['status']) \
.over(Window.partitionBy("date_cast").orderBy(F.asc('date_cast')))).show()
有人可以帮助解决以下任何问题吗?
>>> column_list = ["date_cast","id"]
>>> win_spec = Window.partitionBy([F.col(x) for x in column_list]).orderBy(F.asc('date_cast'))
>>> df.withColumn('lag_status', F.lag('status').over(
... win_spec
... )
... )
+----------------------+------------------------+--------------------+-----------+
|date_cast |id. | staus |lag_status|
+----------------------+------------------------+--------------------+-----------+
| 2021-02-19| 123... |open | null|
| 2021-02-21| 123... |open | null|
| 2021-02-17| 123... |open | null|
| 2021-02-18| 123... |open | null|
| 2021-02-22| 123... |open | null|
| 2021-02-20| 123... |open | null|
+----------------------+------------------------+--------------------+-----------+
发生这种情况是因为您按 date_cast 对数据进行了分区,并且 date_cast 具有唯一值。使用“id”代替 date_cast 例如:
df_lag = df.withColumn('lag_status',F.lag(df['status']) \
.over(Window.partitionBy("id").orderBy(F.asc('date_cast')))).show()
我有一个看起来像这样的数据框
>>> df.show()
+----------------------+------------------------+--------------------+
|date_cast |id | status |
+----------------------+------------------------+--------------------+
| 2021-02-20| 123... |open |
| 2021-02-21| 123... |open |
| 2021-02-17| 123... |closed |
| 2021-02-22| 123... |open |
| 2021-02-19| 123... |open |
| 2021-02-18| 123... |closed |
+----------------------+------------------------+--------------------+
我一直在尝试对其应用一个非常简单的滞后以查看其前一天的状态,但我一直得到空值。日期是一个字符串,所以我投了,我想这可能是由于日期未在结果中排序的问题。我还在我的 over partition by 中对窗口进行了硬编码,但仍然为空。
df_lag = df.withColumn('lag_status',F.lag(df['status']) \
.over(Window.partitionBy("date_cast").orderBy(F.asc('date_cast')))).show()
有人可以帮助解决以下任何问题吗?
>>> column_list = ["date_cast","id"]
>>> win_spec = Window.partitionBy([F.col(x) for x in column_list]).orderBy(F.asc('date_cast'))
>>> df.withColumn('lag_status', F.lag('status').over(
... win_spec
... )
... )
+----------------------+------------------------+--------------------+-----------+
|date_cast |id. | staus |lag_status|
+----------------------+------------------------+--------------------+-----------+
| 2021-02-19| 123... |open | null|
| 2021-02-21| 123... |open | null|
| 2021-02-17| 123... |open | null|
| 2021-02-18| 123... |open | null|
| 2021-02-22| 123... |open | null|
| 2021-02-20| 123... |open | null|
+----------------------+------------------------+--------------------+-----------+
发生这种情况是因为您按 date_cast 对数据进行了分区,并且 date_cast 具有唯一值。使用“id”代替 date_cast 例如:
df_lag = df.withColumn('lag_status',F.lag(df['status']) \
.over(Window.partitionBy("id").orderBy(F.asc('date_cast')))).show()