让我说我有这个数据
User | Item | Timestamp
A 1 1
A 2 2
B 3 3
B 4 4
我需要将属于每个用户的行组合在一起。每个事件发生后1小时内发生的所有事件。所以基本上像
groupBy(user, timestamp - 1.hour)
使用RDD有没有办法在Spark中执行此操作?使用Dataframe不是一个选项
答案 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}"
最好的情况是,您可以使用某些快速特定于域的逻辑构建唯一的Int
或Long
密钥。