apache-spark - DStream updateStateByKey更新函数实现

标签 apache-spark spark-streaming

阅读完文档、源代码和示例后,我试图了解 updateStateByKey 的不同方法签名,以及何时使用其中一种方法比另一种更合适。

具体来说,我不理解以下 API:

def updateStateByKey[S: ClassTag](
  updateFunc: (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)],
  ...
)

在什么情况下我会创建一个 updateFunc 来接受并返回一个 Iterator 而不是实现 (Seq[V], Option[S]) =>选项[S]功能?

最佳答案

虽然 (Seq[V], Option[S]) => Option[S] 会让您仅“查看”某个键的前一个(如果有)和当前值,但您无法访问 key 本身。

使用 (Iterator[(K, Seq[V], Option[S])]) => Iterator[(K, S)] 你也可以根据键做出决定,例如“我见过这个键吗”,“我见过所有这些键吗”,将键与决策逻辑中的值进行比较,或者仅保留键的子集(例如“top-k”)。

关于apache-spark - DStream updateStateByKey更新函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317639/

相关文章:

scala - 如何在 Scala 和 Apache Spark 中连接两个 DataFrame?

python - (Pyspark - 在一段时间内按用户分组

java - Spark - 如何在类中使用 SparkContext?

scala - 如何使用 `ssc.fileStream()` 读取 Parquet 文件?传递给 `ssc.fileStream()` 的类型是什么?

apache-kafka - 能否使用kafka获取GoogleAnalytics数据并通过spark streaming进行处理?

apache-spark - Spark 流: ERROR StreamingContext: failed to construct kafka consumer

apache-spark - Spark Streaming 处理时间 vs 总延迟 vs 处理延迟

java - 如何在流批流连接中定义连接条件?

python - Spark Streaming 不从本地目录读取

apache-spark - 将 spark 数据帧转换为 aws 胶水动态帧