Я думаю, что вы должны удалить поле "date" из оператора partitionBy.Данные уникальны с полями «дата» и «текст», так что это означает, что больше нет другой комбинации.Это причина, по которой все значения возвращают ноль
>>> from pyspark.sql.window import Window
>>> import pyspark.sql.functions as func
>>>
>>> data = sc.parallelize([
... ('20180901','cat',2,1),
... ('20180901','dog',2,1),
... ('20180902','cat',3,2),
... ('20180902','dog',6,2),
... ('20180903','cat',2,3),
... ('20180904','cat',3,4),
... ('20180905','cat',2,5),
... ('20180905','dog',4,5)])
>>>
>>> columns = ['date','text','count','day']
>>> df = spark.createDataFrame(data, columns)
>>>
>>> window = Window.partitionBy('text').orderBy('date','text')
>>> df = df.withColumn('prev_date', func.lag('count').over(window))
>>>
>>> df.sort('date','text').show()
+--------+----+-----+---+---------+
| date|text|count|day|prev_date|
+--------+----+-----+---+---------+
|20180901| cat| 2| 1| null|
|20180901| dog| 2| 1| null|
|20180902| cat| 3| 2| 2|
|20180902| dog| 6| 2| 2|
|20180903| cat| 2| 3| 3|
|20180904| cat| 3| 4| 2|
|20180905| cat| 2| 5| 3|
|20180905| dog| 4| 5| 6|
+--------+----+-----+---+---------+