2017-06-04 72 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