kubeflow二次开发--pipeline后端开发新接口

11 篇文章 5 订阅

一、环境介绍

系统:Centos7
Kubeflow版本:0.7.0
Pipeline版本:0.1.31

代码已上传我的github
https://github.com/reachyu/pipelines-0.1.31

二、开始coding

《kubeflow二次开发–pipeline后端在mysql数据库增加表》中我们新增了一个表。
本次二次开发场景是增加一个应用管理模块,需要增加应用管理相关的表。
本次表模型文件名是app_manage.go,在数据库中创建的表的名称是app_manages。
在这里插入图片描述
现在我们开发两个服务,向此表增加数据以及从此表查询数据。
pipeline后端服务目录个人理解如下
在这里插入图片描述
服务调用路径:
1) 在backend\src\apiserver\client_manager.go初始化,创建实例
2) backend\src\apiserver\main.go定义访问路径和路径路由
3) main.go–>*server.go–>*resource.go–>*storage.go

1、增加数据库操作实现

增加文件backend\src\apiserver\storage\myapp_manage_store.go
在这里插入图片描述
并在同级目录的BUILD.bazel文件增加内容(bazel编译需要)在这里插入图片描述
本次只实现两个功能:增加数据、查询数据

2、模块入口封装

修改backend\src\apiserver\resource\resource_manager.go
增加代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改\backend\src\apiserver\resource\client_manager_fake.go
增加代码
在这里插入图片描述
在这里插入图片描述

3、增加模块服务实现

增加文件backend\src\apiserver\server\myapp_manage_server.go
在这里插入图片描述
并在同级目录的BUILD.bazel文件增加内容(bazel编译需要)
在这里插入图片描述

4、初始化

修改backend\src\apiserver\client_manager.go
增加代码
在这里插入图片描述
在这里插入图片描述

5、定义接口访问地址

修改backend\src\apiserver\main.go
增加代码
在这里插入图片描述

6、制作和使用镜像

参见《kubeflow二次开发–pipeline后端build image》在这里插入图片描述
在这里插入图片描述
加载镜像
在这里插入图片描述
使用镜像
在这里插入图片描述
修改pod使用镜像

kubectl edit deployment admission-webhook-deployment -n kubeflow

把镜像版本修改为重新build的版本号
在这里插入图片描述

7、访问接口

访问查询接口
http://nodeip:port/pipeline/apis/v1beta1/myapp/get?id=
在这里插入图片描述
增加数据接口
在这里插入图片描述
在这里插入图片描述

7、一个关于数据类型的问题

问题

{"error_message":"Error get app .: InternalServerError: Failed to get application: sql: Scan error on column index 7, name \"update_at\": converting driver.Value type \u003cnil\u003e (\"\u003cnil\u003e\") to a int64: invalid syntax: sql: Scan error on column index 7, name \"update_at\": converting driver.Value type \u003cnil\u003e (\"\u003cnil\u003e\") to a int64: invalid syntax","error_details":"Error get app .: InternalServerError: Failed to get application: sql: Scan error on column index 7, name \"update_at\": converting driver.Value type \u003cnil\u003e (\"\u003cnil\u003e\") to a int64: invalid syntax: sql: Scan error on column index 7, name \"update_at\": converting driver.Value type \u003cnil\u003e (\"\u003cnil\u003e\") to a int64: invalid syntax"}

原因

从数据库读取可能为null值得值时,可以选择使用sql.NULL***来读取;或者使用IFNULL、COALESCE等命令让数据库查询值返回不为”“或者NULL。
若需要往数据库中插入null值,则依然可以使用sql.NULL***存储所需的值,然后进行插入NULL值。
直接使用sql.NULL***类型容易出现valid遗漏设置等问题,普通int、string与其转换时,请写几个简单的get、set函数。

解决
修改文件backend\src\apiserver\model\app_manage.go
允许为空的字段,类型改为如下类型
在这里插入图片描述
修改文件backend\src\apiserver\storage\app_manage_store.go
scanRows方法,允许为空的字段,类型改为如下类型
在这里插入图片描述
修改文件backend\src\apiserver\server\app_manage_server.go
Model定义的字段,类型是sql.NullString,sql.NullString是一个struct
从post取到的值赋值给model成员的时候,sql.NullString类型字段要赋值给String
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
scikit-learn的pipeline是一种方便的工具,可以将数据预处理和机器学习模型训练组合成一个流程,以便于快速迭代和调整。pipeline可以将多个步骤组合成一个整体,从而简化代码和工作流程。 pipeline的基本用法如下: 1. 导入所需的模块和数据 ```python from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split ``` 2. 准备数据集,并将其划分为训练集和测试集 ```python iris = load_iris() X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42) ``` 3. 创建pipeline对象,并将数据预处理和模型训练步骤添加到pipeline中 ```python pipeline = Pipeline([ ('scaler', StandardScaler()), ('logistic', LogisticRegression()) ]) ``` 4. 使用pipeline进行训练和预测 ```python pipeline.fit(X_train, y_train) y_pred = pipeline.predict(X_test) ``` 在上面的代码中,我们首先定义了一个pipeline对象,包含两个步骤。第一个步骤是数据标准化(使用StandardScaler),第二个步骤是逻辑回归模型的训练(使用LogisticRegression)。然后我们使用fit方法对pipeline进行训练,并使用predict方法进行预测。 需要注意的是,pipeline中的每个步骤都必须是一个scikit-learn中的转换器(transformer)或估计器(estimator),并且每个步骤的输出都必须与下一个步骤的输入类型相匹配。在例子中,StandardScaler是一个转换器,它将数据标准化为均值为0,方差为1的形式,而LogisticRegression是一个估计器,它使用标准化后的数据进行训练和预测。 pipeline的另一个好处是可以使用GridSearchCV(网格搜索)来对pipeline中的超参数进行调优,以找到最佳的模型参数组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值