我们假设,我有一个应用程序
mapWithState
/ updateStateByKey
保存状态。注意:我还没有使用任何缓存。
我的问题是,
mapWithState
/ updateStateByKey
返回dStream
,但会自动执行一些缓存/存储吗?mapWithState
/ updateStateByKey
之前的转换只应用一次而不重新计算?我的意思是,如果状态仍然包含30天前获得的数据,是否会重新计算是否找不到预先计算的结果?答案 0 :(得分:1)
第2步的转换是否会执行两次(一次是针对action1 和action2每个)?对我来说,似乎只执行一次
这实际上取决于我们正在谈论的转变。如果你有一个图形的两个分支,每个分支并行进行一些计算,它应该工作。
mapWithState / updateStateByKey返回dStream,但是它会做一些 自动缓存/存储?
这些转换的重点是在迭代之间保持状态,这就是他们所做的。 mapWithState
有一个明确的State[S]
对象,您可以自行添加/更新/删除。
是否有保证,以前的转变 mapWithState / updateStateByKey只应用一次而不是 重新计算?我的意思是,如果州仍然包含30天获得的数据 之前,如果未找到预先计算的结果,它会重新计算
mapWithState
和updateStateByKey
以外的所有转换都是无状态的。如果整个RDD
缺少必要数据,则可以请求重新计算缺少的RDD
部分。如果这就是你的意思。