【问题标题】:Is mapWithState/updateStateByKey cached?mapWithState/updateStateByKey 是否缓存?
【发布时间】:2016-12-06 08:14:25
【问题描述】:

假设,我有一个应用程序

  1. 从 kafka 创建一个新流
  2. 做一些转换
  3. 使用mapWithState/updateStateByKey 保存状态。
  4. 对来自状态的流进行更多转换。
  5. 做一些 action1 和 action2。

注意:我还没有使用任何缓存。

我的问题是,

  • 步骤 2 的转换是否会执行两次(action1 和 action2 各一次)?对我来说,它似乎只执行一次!!!
  • mapWithState/updateStateByKey 返回dStream,但它会自动进行一些缓存/存储吗?
  • 是否有保证,mapWithState/updateStateByKey 之前的转换只应用一次而不重新计算?我的意思是,如果状态仍然包含30天前获取的数据,如果没有找到预先计算的结果,它会重新计算吗?

【问题讨论】:

    标签: scala apache-spark apache-kafka spark-streaming


    【解决方案1】:

    步骤 2 的转换是否会执行两次(一次用于 action1 和action2每个)?对我来说,它似乎只执行一次

    这实际上取决于我们正在谈论的转换。如果您有一个图的两个分支,每个分支都并行进行一些计算,那么它应该可以工作。

    mapWithState/updateStateByKey 返回 dStream,但它会做一些事情吗 自动缓存/存储?

    这些转换的重点是在迭代之间保持状态,这就是它们的作用。 mapWithState 有一个明确的 State[S] 对象,您可以自己添加/更新/删除。

    有没有保证,之前的变换 mapWithState/updateStateByKey 只应用一次而不是 重新计算?我的意思是,如果状态仍然包含 30 天获得的数据 之前,如果没有找到预先计算的结果,是否会重新计算

    mapWithStateupdateStateByKey 之外的所有转换都是无状态的。如果一个RDD作为一个整体缺少一条必要的数据,它可以请求重新计算RDD缺少的那部分。如果这就是你的意思。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2015-08-06
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多