FATE联邦学习框架java实践(一)

同系列文章:

FATE联邦学习框架入门指南 - 掘金 (juejin.cn)

FATE联邦学习框架:API实践Upload和DownLoad的踩坑记录 - 掘金 (juejin.cn)
项目源码FateTest - 码云 - 开源中国 (gitee.com)

因为公司技术栈和Fate的技术架构的原因,我们最终选择了采用Java调用接口的方式与FATE平台实现连通。目前为止,通过网络搜索对于Fate应用相关的文章都非常少,对于其详细系统性实践的文章更是一篇没有。

因此,这次实践可以说是目前为止,第一篇对于Fate在java实践的企业级探索。

任务梳理

具体的项目背景不方便透露,但是只需要知道项目对于Fate的具体要求就是,双方将用户存入Fate平台中,然后通过Fate的 隐私计算求交能力,返回双方的交集用户列表。

具体流程图如下:

我们需要隐私计算平台提供的功能

通过以上任务流程的梳理,我们需要的基础功能如下:

  1. 用户集管理:用于存储用户唯一标识,将不同用户存入不同集

  2. 用户集增、删功能:实现用户集转入、转出

  3. 交集判断:在两个用户集间判断是否为交集用户(需要跨平台)

根据对Fate的上下摸索,针对以上能力,Fate基本都能提供,但是还是存在一点不足。

Fate提供的功能

  1. Fate平台提供表概念,可以将数据集存入表中
  2. Fate仅有增删表的功能,但无表数据更新功能。
  3. Fate提供了intersrction模块,可以进行跨平台的隐私计算求交。

Fate的局限性

因为我这次的需求是做实时任务,而Fate更适合离线任务,所以这些局限性是对实时任务来说的。

  1. 没有表数据更新功能,意味着我们仅能通过下载表的csv文件后对表进行处理重新覆盖上传,来实现数据更新功能。同时这也意味着更大的IO开销和更高的时间成本。

  2. 数据上传或任务提交接口,请求接口后返回值的成功标识是指数据开始上传或者任务开始执行。仅能通过轮询任务状态来确定任务是否执行成功。 这也意味着更大的IO开销和更高的开发成本。

  3. Fate的表可以通过table bind绑定mysql数据表,但是我们不确定mysql数据源能不能预先导入数据,甚至能够通过更新mysql实现Fate表数据更新的功能。因为绑定没成功过。。。

Fate通过java实现基础的数据上传和导出

数据上传和下载接口只需要通过java请求官方文档API即可,但是还是有很多值得注意的地方

数据上传

数据上传接口的postman调试都费了很大的功夫,使用java调用更麻烦。

参考实现: java 实现带RequestBody传Json参数的GET请求 - 掘金 (juejin.cn)

1. 首先实现请求api的方法

2. 然后做好封装

数据下载

数据下载接口有两个,一个是导出数据的接口,结果返回为数据列表,一个是导出数据为文件的结果,结果为压缩文件。

但是返回结果列表的接口,最多能返回100条数据。

1. 同样首先实现请求api的方法

2. 因为结果返回为压缩包文件,所以实现了一个解压方法。

解压方法逻辑比较复杂。最终结果为将tar.gz文件中解压出的两个文件中保留结果数据文件并将其命名为指定名称。

3. 最后做好封装

相关推荐
Arva .几秒前
Spring Boot自动配置原理
java·spring boot·后端
寻星探路2 分钟前
Java EE初阶启程记15---文件操作和IO
java·java-ee
阿巳helloWorld2 分钟前
SpringMVC底层流程解析
java·开发语言
heartbeat..3 分钟前
介绍java中常用于处理 Excel 文件的Apache POI
java·apache·excel·poi
路边草随风4 分钟前
java 实现 flink 读 kafka 写 iceberg
java·flink·kafka
路边草随风5 分钟前
java 实现 flink cdc 读 mysql binlog 按表写入kafka不同topic
java·大数据·mysql·flink
低客的黑调6 分钟前
Spring MVC 全面详解:原理、组件、实战与高级特性
java·spring·mvc
STARFALL0016 分钟前
spring mvc 自定义Converter 设置
java·spring·mvc
java_logo6 分钟前
Jenkins Docker 容器化部署指南
java·运维·servlet·docker·容器·jdk·jenkins
♡喜欢做梦9 分钟前
MyBatis操作数据库(进阶):动态SQL
java·数据库·sql·java-ee·mybatis