2017-06-04 64 views
1

我正在计算一个词的每周发生次数。也就是说,本周每个单词是否比前一周更频繁。为此,我有点卡住了。我做了以下内容:PySpark每周发生的计算

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| 
+-----+----+-----+ 

我该如何去让28:9 0 =(2 - 2)与oded2:2 =(2 - 0)

谢谢!

回答

2

嗨,你可以使用滞后窗口函数来查找前一周的价值,在你计算单词对等周后。对于没有以前数值的数周的计数将为零,或者您可以使用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() 
+0

完美!谢谢! – Himberjack