【StreamingPro】SQL脚本实现算法模型的训练,预测

前言

搜索团队正好需要计算一些词汇的相关,这个用Word2Vec是很方便的。这个时候我安排算法团队帮个忙弄下。回头就想,因为这么点事,就打断了算法手头的工作,这简直不能忍。

由于我司内部已经在使用基于StreamingPro的Skone平台,通过对SQL做enhance,已经能实现类似hive的脚本引擎了。如果上面的word2vec能直接也用类似sql的语言完成,那开发只要打开web,写几条SQL就自己完成了。

所以开发目标比较简单了,简单的算法,研发可以通过这个feature自己完成,尽可能减少对正在做攻关的算法团队的打搅。

使用演示

详细实现代码参看 xql-dsl 分支。首先我们需要启动StreamingPro作为一个sql server , 如何启动

现在你可以通过rest接口提交SQL脚本给该服务了。

首先,我们加载一个csv文件:

load csv.`/tmp/test.csv` options header="True" as ct;

csv内容如下:

body
a b c
a d m
j d c
a b c
b b c

这个csv文件被映射为表名ct。只有一个字段body。现在我们需要对body字段进行切分,这个也可以通过sql来完成:

select split(body," ") as words from ct as new_ct;

新表叫new_ct,现在,可以开始训练了,把new_ct喂给word2vec即可:

train new_ct as word2vec.`/tmp/w2v_model` where inputCol="words";

word2vec表示算法名, /tmp/w2v_model 则表示把训练好的模型放在哪。where 后面是模型参数。

最后,我们注册一个sql函数:

register word2vec.`/tmp/w2v_model` as w2v_predict;

其中w2v_predict是自定义函数名。这样,我们在sql里就可以用这个函数了。我们来用一把:

select words[0] as w, w2v_predict(words[0]) as v from new_ct as result;

给一个词,就可以拿到这个词的向量了。

我们把它保存成json格式作为结果:

save result as csv.`/tmp/result`;

结果是这样的:

WX20180113-131009@2x.png

最后完整的脚本如下:

load csv.`/tmp/test.csv` options header="True" as ct;
select split(body," ") as words from ct as new_ct;
train new_ct as word2vec.`/tmp/w2v_model` where inputCol="words";
register word2vec.`/tmp/w2v_model` as w2v_predict;
select words[0] as w, w2v_predict(words[0]) as v from new_ct as result;
save overwrite result as json.`/tmp/result`;

大家可以用postman测试:

WX20180113-131211@2x.png

总结

word2vec是个尝试,spark mllib里的算法和工具后续大部分都会迁移过来。

祝威廉责编内容来自:祝威廉 (源链) | 更多关于

阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 后端存储 » 【StreamingPro】SQL脚本实现算法模型的训练,预测

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录