Machine learning 在Flink中序列化复杂模型的最佳实践
我正在使用UDF将一些ML模型应用于数据流。由于Flink无法自动序列化Machine learning 在Flink中序列化复杂模型的最佳实践,machine-learning,apache-flink,Machine Learning,Apache Flink,我正在使用UDF将一些ML模型应用于数据流。由于Flink无法自动序列化模型类(来自第三方库),因此我使用两个变量,如下所示: MyUDF类扩展了KeyedCoProcessFunction[字符串、模型定义、数据、预测] 使用CheckpointedFunction{ //保存已加载的模型 @暂时私有var模型:HashMap[(字符串,字符串),模型]=_ //用于序列化目的 @瞬态专用var模型字节:MapState[(字符串,字符串),数组[字节]=_ ... } 其中: model
模型
类(来自第三方库),因此我使用两个变量,如下所示:
MyUDF类扩展了KeyedCoProcessFunction[字符串、模型定义、数据、预测]
使用CheckpointedFunction{
//保存已加载的模型
@暂时私有var模型:HashMap[(字符串,字符串),模型]=_
//用于序列化目的
@瞬态专用var模型字节:MapState[(字符串,字符串),数组[字节]=_
...
}
其中:
保存加载(运行)的模型(从models
创建,基本上是一个字符串)ModelDef
是真实(键控)状态,它保存相同的模型,但作为一个字节块,因此检查点工作良好modelsBytes
fromBytes
/toBytes
),但我不知道这是否是一种常见/最佳做法。在本质上相同的事情上有两个变量看起来很奇怪。例如,您可以找到一个使用TypeSerializer[Option[Model]]
的示例,它看起来更简洁,但实现起来也更复杂
因此,基本上:
- 我应该使用
方法还是使用某种复制状态来运行/序列化模型是可以的TypeSerializer
- 另外,如果您能给我指出一些关于Flink中自定义类型序列化的文档/示例,那就太好了,通常我发现官方文档在这方面有点欠缺
类型序列化程序
堆状态后端将仅序列化检查点上的数据,否则将保持数据不变。因此,当您使用该后端而过度管理映射本身时,几乎没有性能损失。但是,它将不再需要手动执行序列化和同步