填写pyspark数据框中行之间的缺失日期

时间:2018-08-30 10:49:49

标签: python apache-spark dataframe pyspark

我有一些数据框,其中dates列为类型为Timestamp的“ date”

+------------+--------------+-----+
|   date     |         title|count|
+------------+--------------+-----+
|  2002-09-01|text1         |    2|
|  2003-03-01|text1         |    4|
|  2007-11-01|text1         |    4|

,我想获取相同标题在这些日期之间的所有缺失日期(以我的情况为月份),并使用count = 0初始化所有

+------------+--------------+-----+
|   date     |         title|count|
+------------+--------------+-----+
|  2002-09-01|text1         |    2|
|  2002-10-01|text1         |    0|
|  2002-11-01|text1         |    0|
|  2002-12-01|text1         |    0|
|  2003-01-01|text1         |    0|
|  2003-02-01|text1         |    0|
|  2003-03-01|text1         |    4|
|  2003-04-01|text1         |    0|
.........

我应该将它用于Window Expression中的LEAD函数吗? 我实际上在其他线程filling dates in scala中找到了我真正需要的东西 但是我在scala方面不是很出色,在将其用于pyspark方面并不是一个新事物。我尝试过这种方法,但不确定是否正确。不胜感激!

def generate_date_series(start, stop):
    return [start + datetime.timedelta(days=x) for x in range(0, (stop-start).days + 1)]    

w = Window.orderBy("date")
tmpDF = df.withColumn("diff", datediff(f.lead(col("date"),1).over(w), col("date")))
    .filter(col("diff")>31)
    .withColumn("date", generate_date_series(explode(....)))

0 个答案:

没有答案