Spark 使用 mapWithState 流式传输多个 KMeans
Spark streaming multiple KMeans with mapWithState
您好,我正在计划一个部署,其中 Spark 可以处理来自 Kafka 的传入数据的繁重工作,以应用 StreamingKMeans 进行异常值检测。
然而,来自 Kafka 主题的数据来自各种来源,定义了需要不同 KMeans 模型(状态)的不同数据结构。因此,传入的离散 RDD 中的每个条目都应该基于 "key" 字段(基本上我需要单个事件处理)通过自己的 KMeans 模型。
这种处理方式可以用Spark实现吗?如果是,它最终是否利用了 Spark 并行性?我是 Spark 和 Scala 的新手,感觉我缺少了一些东西。
提前致谢。
更新:
我目前正在研究似乎可以解决此问题的 mapWithState
运算符。问题是:我可以直接将 StreamingKmeans 模型保存到状态中吗?否则我将不得不保存质心并在状态更新函数中实例化一个新模型,这看起来很昂贵。
Can this type of processing be achieved with Spark? If yes, does it exploit Spark parallelism in the end?
理论上这种类型的处理是可能的,它可以从分布式处理中获益,但绝对不是您想要使用的工具。
StreamingKMeans
是一种设计用于 RDD 的模型,由于 Spark 不支持嵌套转换,因此您不能在有状态转换中使用它。
如果键集的基数较低并且所有值都是预先知道的,您可以 按键并为每个键保留单独的模型。
如果没有,您可以将 StreamingKMeans
替换为第三方本地和可序列化的 K-means 模型,并与 mapWithState
或 updateStateByKey
结合使用。一般来说,在不降低整体并行性的情况下,它应该比使用分布式版本更有效。
您好,我正在计划一个部署,其中 Spark 可以处理来自 Kafka 的传入数据的繁重工作,以应用 StreamingKMeans 进行异常值检测。
然而,来自 Kafka 主题的数据来自各种来源,定义了需要不同 KMeans 模型(状态)的不同数据结构。因此,传入的离散 RDD 中的每个条目都应该基于 "key" 字段(基本上我需要单个事件处理)通过自己的 KMeans 模型。
这种处理方式可以用Spark实现吗?如果是,它最终是否利用了 Spark 并行性?我是 Spark 和 Scala 的新手,感觉我缺少了一些东西。
提前致谢。
更新:
我目前正在研究似乎可以解决此问题的 mapWithState
运算符。问题是:我可以直接将 StreamingKmeans 模型保存到状态中吗?否则我将不得不保存质心并在状态更新函数中实例化一个新模型,这看起来很昂贵。
Can this type of processing be achieved with Spark? If yes, does it exploit Spark parallelism in the end?
理论上这种类型的处理是可能的,它可以从分布式处理中获益,但绝对不是您想要使用的工具。
StreamingKMeans
是一种设计用于 RDD 的模型,由于 Spark 不支持嵌套转换,因此您不能在有状态转换中使用它。
如果键集的基数较低并且所有值都是预先知道的,您可以
如果没有,您可以将 StreamingKMeans
替换为第三方本地和可序列化的 K-means 模型,并与 mapWithState
或 updateStateByKey
结合使用。一般来说,在不降低整体并行性的情况下,它应该比使用分布式版本更有效。