PySpark每周出现的计算

时间:2017-06-04 10:09:05

标签: pyspark pyspark-sql

我正在尝试计算单词的每周出现次数。也就是说,本周每个单词是否比前一周更频繁。为此,我有点卡住了。我做了以下事情:

docker run

结果是:

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")

我怎样才能得到oded:0 =(2 - 2)和oded2:2 =(2 - 0)

谢谢!

1 个答案:

答案 0 :(得分:2)

您好,您可以使用滞后窗口功能查找上周的值,在您计算同一周的单词之后。如果没有以前的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()