在同一个RDD上调用updateStateByKey两次

时间:2015-02-12 12:10:49

标签: scala cassandra apache-spark apache-kafka

我可以在同一个RDD上调用UpdateStateByKey两次。我的要求如下。

  1. 从Kafka获取活动流
  2. UpdateStateByKey以基于时间戳聚合和过滤事件集
  3. 进行一些处理并保存到Cassandra DB
  4. UpdateStateByKey以基于eventType
  5. 删除密钥

    我尝试将第2步的结果分配给VAR并将其重新分配给步骤4中的更新值。但似乎它不起作用。我是新手,不知道这种行为是如何可行的。

    感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我通过在状态更新方法开始时第二次调用updateStateByKey()来实际执行清理时解决了这个问题。一个小例子:

private static Optional<State> updateState(
        final List<Events> allEvents,
        final Optional<State> state) {
    State state = state.or(State::new);
    state.clearAccumulatedValues();

    // Do some work...
    state.addValue("Purple Elephants!");

    return Optional.fromNullable(state.isEmpty() ? null : state);
}