我有一个关于使用Spark的时间事件的问题,以及处理它的最佳方法。
所以我提取了一个非常大的数据集,每个事件都有特定的开始/停止时间。
例如,我可能会加载三周的数据。在主时间窗口内,我将其分成较小间隔的桶。因此,3周分为24小时时间段,其数组看起来像[(start_epoch,stop_epoch),(start_epoch,stop_epoch),...]
在每个时间段内,我将事件映射/减少为较小的集合。
我希望将事件按其所属的时间段分开。
处理此问题的最佳方法是什么?每个map / reduce操作都会产生一个新的RDD,因此我实际上留下了大量的RDD。
它是否安全"从驱动程序循环遍历该数组,然后在每个RDD上执行其他转换/操作以获取每个窗口的结果?
谢谢!
答案 0 :(得分:1)
我建议稍微考虑一下: 你想要阅读你的数据,然后" keyBy"时间四舍五入到小时分辨率然后你可以reduceByKey(如果你想在输出中输入另一种类型,可以使用combineByKey)。
使用spark时,没有必要通过某些键(甚至反模式)将项目收集到数组中
RDD [事件] - > keyBy舍入到小时 - > RDD [(小时,事件)] - > reduceByKey(即小时) - > RDD [(小时,本小时内所有事件的汇总视图)]