【问题标题】:Pyspark Lag function returning nullPyspark Lag 函数返回 null
【发布时间】:2021-07-14 04:56:03
【问题描述】:

我有一个看起来像这样的数据框

>>> 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              |
+----------------------+------------------------+--------------------+

我一直在尝试对其应用一个非常简单的延迟,以查看其前一天的状态,但我一直为空。日期是一个字符串,所以我投了,认为这可能是由于日期没有在结果中排​​序的问题。我还在我的过度分区中硬编码了窗口,但仍然为空。

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|
+----------------------+------------------------+--------------------+-----------+

【问题讨论】:

    标签: pyspark window-functions lag


    【解决方案1】:

    发生这种情况是因为您已按 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()
    

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 1970-01-01
      • 2021-03-31
      • 2016-01-30
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多