使用 pySpark 计算用户事件之间的平均时间

Ahm*_*met 2 apache-spark

我有一个由“事件”、“时间”、“用户 ID”组成的日志文件。

+------------+----------------+---------+
|   Events   |      Time      | UserId  |
+------------+----------------+---------+
| ClickA     | 7/6/16 10:00am | userA   |
+------------+----------------+---------+
| ClickB     | 7/6/16 12:00am | userA   |
+------------+----------------+---------+
Run Code Online (Sandbox Code Playgroud)

我想为每个用户计算事件之间的平均时间。你们如何解决这个问题?在传统的编程环境中,我会遍历用户的每个事件并计算事件nn-1之间的时间增量,将该值添加到数组 A 中。然后我会计算 A 中每个值的平均值。我怎样才能用 Spark 来做这个吗?

zer*_*323 5

忽略日期解析,它看起来像是窗口函数的工作,然后是简单的聚合,所以粗略地你需要这样的东西:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.{lag, avg}

val df = Seq(
  ("ClickA", "2016-06-07 10:00:00", "UserA"),
  ("ClickB", "2016-06-07 12:00:00", "UserA")
).toDF("events", "time", "userid").withColumn("time", $"time".cast("timestamp"))

val w = Window.partitionBy("userid").orderBy("time")

// Difference between consecutive events in seconds
val diff = $"time".cast("long") - lag($"time", 1).over(w).cast("long")

df.withColumn("diff", diff).groupBy("userid").agg(avg($"diff"))
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2363 次

最近记录:

9 年,7 月 前