每周发生次数的 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()
我正在尝试计算某个词每周出现的次数。也就是每个词本周是否比前一周出现频率更高。为此,我有点卡住了。我做了以下事情:
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()