Pyspark Pypark每周事件的计算
我试图计算一个单词每周出现的次数。也就是说,本周每个单词是否比前一周更频繁。为此,我有点被卡住了。我做了以下工作:Pyspark Pypark每周事件的计算,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我试图计算一个单词每周出现的次数。也就是说,本周每个单词是否比前一周更频繁。为此,我有点被卡住了。我做了以下工作: m = sc.parallelize(["oded,12-12-2018", "oded,12-03-2018", "oded,12-12-2018", "oded,12-06-2018", "oded2,12-02-2018", "oded2,12-02-2018"]) m = m.map(lambda line: line.split(','))
m = sc.parallelize(["oded,12-12-2018", "oded,12-03-2018", "oded,12-12-2018", "oded,12-06-2018", "oded2,12-02-2018", "oded2,12-02-2018"])
m = m.map(lambda line: line.split(','))
weekly = m.map(lambda line: (line[0], (parse(line[1]).strftime("%V%y"))))
s = sql.createDataFrame(daily)
s.groupby("_1", "_2").count().sort("_2")
结果是:
+-----+----+-----+
| _1| _2|count|
+-----+----+-----+
|oded2|4818| 2|
| oded|4918| 2|
| oded|5018| 2|
+-----+----+-----+
我如何去获取oded:0=(2-2)和oded2:2=(2-0)您好,您可以使用lag窗口函数,在计算上周的单词数后,查找前一周的值。对于之前没有count值的周,该值将为零,或者您可以使用na.drop()完全删除该行
from pyspark.sql.functions import lag, col,coalesce
from pyspark.sql.window import Window
w = Window().partitionBy("_1").orderBy(col("_2"))
s.select("*", lag("count").over(w).alias("prev_week")).na.fill(0).show()
完美的非常感谢。