【问题标题】:Array of RDDs? One RDD for a time windowRDD 数组?一个时间窗口的 RDD
【发布时间】:2016-03-13 04:09:13
【问题描述】:

我有一个关于使用 Spark 分桶时间事件以及处理它的最佳方法的问题。

所以我正在摄取一个非常大的数据集,每个事件都有特定的开始/停止时间。

例如,我可能会在三周内加载数据。在主时间窗口内,我将其划分为较小间隔的桶。所以 3 周分为 24 小时时间段,数组看起来像 [(start_epoch, stop_epoch), (start_epoch, stop_epoch), ...]

在每个时间段内,我将我的事件映射/减少到一个较小的集合中。

我想按事件所属的时间段来划分事件。

处理此问题的最佳方法是什么?每个 map/reduce 操作都会产生一个新的 RDD,所以我实际上只剩下一大堆 RDD。

从驱动程序中循环遍历该数组,然后在每个 RDD 上执行其他转换/操作以获得每个时间窗口的结果是否“安全”?

谢谢!

【问题讨论】:

  • 看起来只是一个很小的数组。应该没问题。为什么不试试呢?
  • 在 3 周内执行 1 小时的 bins 大约是 504 给或取 1,所以这是一个数组中的许多 RDD。我刚刚尝试过,似乎工作正常,只要我.persist() 是较小 RDD 派生的主要 RDD。所以不会每次都重新收集主 RDD。

标签: apache-spark


【解决方案1】:

我建议换个角度想一想: 您要读取数据,然后将“keyBy”时间四舍五入为小时分辨率。然后你可以 reduceByKey(如果你想输出另一种类型,或者 combineByKey)。

在使用 spark 时,不需要通过某些键(甚至是反模式)将项目收集到数组中

RDD[Event] -> keyBy ts 四舍五入到小时 -> RDD[(hour, event)] -> reduceByKey(即小时) -> RDD[(小时, 这一小时内所有事件的聚合视图)]

【讨论】:

  • 这有帮助!是的,我能够将密钥设置为最近的小时(时间 - (时间 %3600)),然后从那里开始!
猜你喜欢
  • 2016-12-23
  • 2016-08-23
  • 2019-04-25
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多