Apache spark 如何在Spark Streaming中构建查找映射?

Apache spark 如何在Spark Streaming中构建查找映射?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,在spark流媒体应用程序中,维护应用程序状态的最佳方法是什么 我知道两种方法: 使用“Union”操作附加到查找RDD,并在每次Union后将其持久化 将状态保存在文件或数据库中,并在每个批处理开始时加载 我的问题是从性能的角度来看,哪一个更好?另外,还有更好的方法吗?您应该使用以下方法: import org.apache.spark.streaming.{ StreamingContext, Seconds } val ssc = new StreamingContext(sc, batc

在spark流媒体应用程序中,维护应用程序状态的最佳方法是什么

我知道两种方法:

  • 使用“Union”操作附加到查找RDD,并在每次Union后将其持久化
  • 将状态保存在文件或数据库中,并在每个批处理开始时加载

  • 我的问题是从性能的角度来看,哪一个更好?另外,还有更好的方法吗?

    您应该使用以下方法:

    import org.apache.spark.streaming.{ StreamingContext, Seconds }
    val ssc = new StreamingContext(sc, batchDuration = Seconds(5))
    
    // checkpointing is mandatory
    ssc.checkpoint("_checkpoints")
    
    val rdd = sc.parallelize(0 to 9).map(n => (n, n % 2 toString))
    import org.apache.spark.streaming.dstream.ConstantInputDStream
    val sessions = new ConstantInputDStream(ssc, rdd)
    
    import org.apache.spark.streaming.{State, StateSpec, Time}
    val updateState = (batchTime: Time, key: Int, value: Option[String], state: State[Int]) => {
      println(s">>> batchTime = $batchTime")
      println(s">>> key       = $key")
      println(s">>> value     = $value")
      println(s">>> state     = $state")
      val sum = value.getOrElse("").size + state.getOption.getOrElse(0)
      state.update(sum)
      Some((key, value, sum)) // mapped value
    }
    val spec = StateSpec.function(updateState)
    val mappedStatefulStream = sessions.mapWithState(spec)
    
    mappedStatefulStream.print()
    

    你看过updateStateByKey吗?在中查找它,然后尝试该示例,看看它是否适合您的需要是的,我查看了它,但不知道如何使用它在我的情况下,状态将是键和值对的映射,其中值是用户对象。现在,对于每个进入的用户活动流,我想更新缓存中的用户对象。