Spark:创建每个项目窗口功能

时间:2016-06-10 19:30:39

标签: apache-spark

让我说我有这个数据

User | Item | Timestamp
A       1         1
A       2         2
B       3         3 
B       4         4

我需要将属于每个用户的行组合在一起。每个事件发生后1小时内发生的所有事件。所以基本上像

groupBy(user, timestamp - 1.hour)

使用RDD有没有办法在Spark中执行此操作?使用Dataframe不是一个选项

1 个答案:

答案 0 :(得分:0)

当然,您可以使用以下任何键进行分组:

def groupBy[K](f: (T) ⇒ K)(implicit kt: ClassTag[K]): RDD[(K, Iterable[T])]

例如:

rdd.groupBy { case (user, timestamp, otherData) => (user, timestamp - 1.hour) }

键越简单越好。有时,使用String键可以更好地工作,因此您可以按

进行分组
s"$user/${timestamp - 1.hour}"

最好的情况是,您可以使用某些快速特定于域的逻辑构建唯一的IntLong密钥。