Расчет 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|
+-----+----+-----+

Как я могу пойти и получить oded: 0 = ( 2 - 2 ) и oded2: 2 = (2 - 0)


person Himberjack    schedule 04.06.2017    source источник


Ответы (1)


arrow_upward
2
arrow_downward

Привет, вы можете использовать функцию окна задержки, чтобы найти значение за предыдущую неделю, после того, как вы посчитаете слова одноранговой недели. Для недель, у которых нет предыдущего значения, значение 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()
person zlidime    schedule 04.06.2017
comment
Идеальный! Благодарю вас! - person Himberjack; 04.06.2017