每周发生次数的 PySpark 计算

PySpark computation of weekly occurrences

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

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)

你好,你可以使用滞后 window 函数来查找上周的值,在你统计每周的字数之后。对于没有先前值的周,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()