外置 Estimator/Transformer 插件

Connect 语句持久化

connect-persist 用于持久化connect语句。当系统重启后,无需再执行connect语句。

如何安装

如果Byzer Meta Store 采用了MySQL存储,那么你需要使用 https://github.com/byzer-org/byzer-extension/blob/master/connect-persist/db.sql 中的表创建到该MySQL存储中。

完成如上操作之后,安装插件:

!plugin app add - 'connect-persist-app-3.0';

注意:示例中 byzer 的 spark 版本为 3.0 ,如果需要在 spark 2.4 的版本运行,请将安装的插件设置为 connect-persist-app-2.4

如何使用

!connectPersist;

所有执行过的connect语句都会被保留下来。当系统重启后,会重新执行。 接下来我们看一个具体的例子。

-- 连接客户端byzer的数据库notebook,取别名为db1
connect jdbc where
url="jdbc:mysql://127.0.0.1:3306/notebook?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&autoReconnect=true&failOverReadOnly=false"
and driver="com.mysql.jdbc.Driver"
and user="root"
and password="root"
as db1;

持久化该connect连接
!connectPersist;

重启byzer-lang引擎,我们可以在后台日志中看到持久化的连接被打印出来:

21/12/15 22:24:37  INFO PluginHook: Register App Plugin connect-persist-app-3.0 in tech.mlsql.plugins.app.ConnectPersistApp
21/12/15 22:24:38  INFO ConnectPersistApp: load connect statement format: jdbc db:db1

启动后执行下面语句:

load jdbc.`db1.mlsql_job` as newtable;

select * from newtable as output limit 1;

可以看到成功查询到了数据,db1连接已经被持久化。

idnameusercell_list
2703_Demo_Notebook2zepp[ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131 ]

使用 MySQL 存储元信息

前面我们提到,byzer Meta Store 可以采用MySQL存储,具体使用方式,请参考:byzer元信息存储

 

Byzer 断言

Byzer 断言 插件提供了在表中使用 assert 断言命令,用于判断 byzer 的结果表中数据是否符合预期。

如何安装

在 web console 中执行以下命令:

!plugin app add - "mlsql-assert-3.0";

注意:示例中 byzer 的 spark 版本为 3.0 ,如果需要在 spark 2.4 的版本运行,请将安装的插件设置为 mlsql-assert-2.4

如何使用

-- 创建测试数据
set jsonStr='''
{"features":[5.1,3.5,1.4,0.2],"label":0.0},
{"features":[5.1,3.5,1.4,0.2],"label":1.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[4.4,2.9,1.4,0.2],"label":0.0}
{"features":[5.1,3.5,1.4,0.2],"label":1.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[4.7,3.2,1.3,0.2],"label":1.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
{"features":[5.1,3.5,1.4,0.2],"label":0.0}
''';
load jsonStr.`jsonStr` as data;
select vec_dense(features) as features ,label as label from data
as data1;

-- 使用 RandomForest
train data1 as RandomForest.`/tmp/model` where

-- 一旦设置为 true,每次运行此脚本时,byzer 都会为您的模型生成新目录
keepVersion="true"

-- 指定测试数据集,该数据集将用于提供评估器以生成一些指标,例如:F1, Accurate
and evaluateTable="data1"

-- 设置 group 0 参数
and `fitParam.0.labelCol`="features"
and `fitParam.0.featuresCol`="label"
and `fitParam.0.maxDepth`="2"

-- 设置 group 1 参数
and `fitParam.1.featuresCol`="features"
and `fitParam.1.labelCol`="label"
and `fitParam.1.maxDepth`="10"
as model_result;

select name,value from model_result where name="status" as result;

-- 确保所有模型的状态都是成功的
!assert result ''':value=="success"'''  "all model status should be success";

如果最终执行结果的 value 不是 "success",则会在 Console 显示异常信息如下:

all model status should be success
java.lang.RuntimeException: all model status should be success
tech.mlsql.plugins.assert.ets.Assert.train(Assert.scala:93)
tech.mlsql.dsl.adaptor.TrainAdaptor.parse(TrainAdaptor.scala:102)
streaming.dsl.ScriptSQLExecListener.execute$1(ScriptSQLExec.scala:368)
streaming.dsl.ScriptSQLExecListener.exitSql(ScriptSQLExec.scala:407)
streaming.dsl.parser.DSLSQLParser$SqlContext.exitRule(DSLSQLParser.java:296)
org.antlr.v4.runtime.tree.ParseTreeWalker.exitRule(ParseTreeWalker.java:47)
org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:30)
org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:28)
streaming.dsl.ScriptSQLExec$._parse(ScriptSQLExec.scala:159)
streaming.dsl.ScriptSQLExec$.parse(ScriptSQLExec.scala:146)
streaming.rest.RestController.$anonfun$script$1(RestController.scala:136)
tech.mlsql.job.JobManager$.run(JobManager.scala:74)
tech.mlsql.job.JobManager$$anon$1.run(JobManager.scala:91)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

Byzer mllib

byzer mllib 插件将 spark-mllib 包装为 byzer ET 使用。

如何安装

  1. 在 Web 控制台中执行以下命令:
!plugin app add "tech.mlsql.plugins.mllib.app.MLSQLMllib" "mlsql-mllib-3.0";

注意:示例中 byzer 的 spark 版本为 3.0 ,如果需要在 spark 2.4 的版本运行,请将安装的插件设置为 mlsql-mllib-2.4

检查是否安装成功,可以执行如下宏命令,用于查看ET组件的信息:

!show et/ClassificationEvaluator;
!show et/RegressionEvaluator;
  1. 手动安装

您也可以手动安装,首先,在你的终端中构建 shade jar:

pip install mlsql_plugin_tool
mlsql_plugin_tool build --module_name mlsql-mllib --spark spark243

然后更改 byzer 引擎的启动脚本,添加jar包:

--jars YOUR_JAR_PATH

在byzer中注册类:

-streaming.plugin.clzznames tech.mlsql.plugins.mllib.app.MLSQLMllib

如果有多个类,请使用逗号分隔它们。 例如:

-streaming.plugin.clzznames classA,classB,classC

如何使用

Classification:

predict data as RandomForest.`<your model HDFS path>` as predicted_table;
run predicted_table as ClassificationEvaluator.``;

Regression:

predict data as LinearRegressionExt.`<your model HDFS path>` as predicted_table;
run predicted_table as RegressionEvaluator.``;

更多 mllib 插件:

  • 唯一标识符算子
  • 频数分布算子

shell 命令插件

byzer shell 插件在 byzer engine 端提供 shell 宏命令,用于将 shell 脚本作为 byzer 代码的一部分来执行。

mlsql-shell.png

如何安装

在 Web 控制台中执行以下命令:

!plugin app add - "mlsql-shell-2.4";

注意:示例中 byzer 的 spark 版本为 2.4 ,如果需要在 spark 3.X 的版本运行,请将安装的插件设置为 mlsql-shell-3.0

执行一个测试脚本,验证是否正确安装:

!sh echo "yes";

如何使用

!sh pip install pyjava;
!sh echo "yes";
!sh wget "https://github.com/byzer-org/byzer-extension/tree/master/mlsql-shell";

 

保存到增量表中再次加载

save then load 插件会将表保存到增量表中,并再次加载。

如何安装

在 Web 控制台中执行以下命令:

!plugin et add - "save-then-load-2.4" named saveThenLoad;

注意:示例中 byzer 的 spark 版本为 2.4 ,如果需要在 spark 3.X 的版本运行,请将安装的插件设置为 save-then-load-3.0

如何使用

!saveThenLoad tableName;
select * from tableName as output;

 

byzer-execute-sql JDBC 插件

JDBC 插件是一个基于JDBC的插件,可以通过JDBC连接各种传统关系型数据库比如 Oracle/DB2/MySQL等,也可以 支持大数据体系下的MPP数据库,执行SQL语句,把数据转化为Byzer内存表。

用户需要确保对应的驱动已经安装到了 Byzer 的 plugin 或者 lib 目录下。

插件信息

  1. 插件: https://download.byzer.org/byzer-extensions/nightly-build/byzer-execute-sql-3.3_2.12-0.1.0-SNAPSHOT.jar
  2. 插件入口类:tech.mlsql.plugins.execsql.ExecSQLApp
  3. 插件名称: byzer-execute-sql-3.3

可以参考在线/离线安装文档进行安装。

使用方式

下面是基本使用方式:

创建一个MySQL 数据库连接:

!conn business 
"url=jdbc:mysql://127.0.0.1:3306/business?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&useSSL=false" 
"driver=com.mysql.jdbc.Driver" 
"user=root" 
"password=xxxx";

第一个参数是数据库连接名称,后面的参数都是连接必须的配置选项。

断开一个 MySQL 数据库链接:

!conn remove business;

在 MySQL中执行诸如创建临时表等操作(这里)

!exec_sql '''

create table1 from select content as instruction,"" as input,summary as output 
from tunningData

''' by business;

指定连接执行SQL,主要是一些创建MPP虚拟表的操作。如果没有异常,不会有返回。

把 MySQL 的数据转化为 Byzer 内存表 tunningData 使用:


!exec_sql tunningData  from '''

select content as instruction,"" as input,summary as output 
from tunningData

''' by business;

select * from tunningData as output;

注意,这里是内存表,数据都会保存在内存里。所以数据规模不能太大,最好加上limit限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做全栈的胖胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值