Scala 在同一RDD上调用updateStateByKey两次

Scala 在同一RDD上调用updateStateByKey两次,scala,cassandra,apache-spark,apache-kafka,Scala,Cassandra,Apache Spark,Apache Kafka,我可以在同一个RDD上调用UpdateStateByKey两次吗。我的要求如下 从Kafka获取事件流 UpdateStateByKey根据时间戳聚合和筛选事件集 进行一些处理并保存到Cassandra数据库 UpdateStateByKey根据事件类型删除密钥 我尝试将第2步的结果分配给一个VAR,并在第4步将其重新分配给更新后的值。但似乎不是这样。我是个新手,不知道这种行为怎么可能发生 谢谢你的帮助 我解决了这个问题,在state update方法开始时第二次调用updateStateByK

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

  • 从Kafka获取事件流
  • UpdateStateByKey根据时间戳聚合和筛选事件集
  • 进行一些处理并保存到Cassandra数据库
  • UpdateStateByKey根据事件类型删除密钥
  • 我尝试将第2步的结果分配给一个VAR,并在第4步将其重新分配给更新后的值。但似乎不是这样。我是个新手,不知道这种行为怎么可能发生


    谢谢你的帮助

    我解决了这个问题,在state update方法开始时第二次调用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);
    }
    
    私有静态可选更新属性(
    所有事件的最终清单,
    最终可选状态){
    State=State.or(State::new);
    state.clearAccumeratedValues();
    //做一些工作。。。
    state.addValue(“紫色大象!”);
    返回可选的.fromNullable(state.isEmpty()?null:state);
    }
    
    这个答案应该解释按键更新状态是如何工作的,是的,您应该能够在同一个RDD上多次调用updateStateByKey,如果您这样做,您可能需要缓存,为了获得更多帮助,您应该发布您所做的尝试。您的意思是,我应该使用广播变量,或RDD持久性,如cache(),persist(),不确定哪一个在上述情况下会有帮助