开源6个月,机器学习平台Alink有哪些值得期待的新功能?个人文章

Alink到目前已经发布了四个Release版本:

上图是Alink在发布1.0版本的时候,所有的算法以及功能,简单来说,Alink的批式功能是和SparkML对应的,SparkML有的功能,Alink基本都提供了。相较于SparkML,除了批式的功能,Alink还提供了流式的功能。

Alink在近半年,功能上整体没有大的变化,下面列举一些正在研发测试,即将开源的一些功能:

在本章,将按照版本的发布顺序,逐步介绍Alink的特性,设计原理,以及使用技巧等内容。

从Alink1.1.0开始,使用Maven中央仓库即可构建Alink项目,下面是POM文件示例。Flink1.10版本依赖:

com.alibaba.alinkalink_core_flink-1.10_2.111.1.0org.apache.flinkflink-streaming-scala_2.111.10.0org.apache.flinkflink-table-planner_2.111.10.0Flink1.9版本依赖:

com.alibaba.alinkalink_core_flink-1.9_2.111.1.0org.apache.flinkflink-streaming-scala_2.111.9.0org.apache.flinkflink-table-planner_2.111.9.0■环境安装实践主要是Python环境搭建,以及JAVA8的安装,Python环境的搭建我们推荐安装Anaconda3,可以对Python的版本进行灵活的控制。不同操作系统的环境准备,请参考下面的教程:

从1.1.0开始,Alink已经发布到了PyPI,安装更加方便了,请参考如下链接:

在讲Notebook示例之前,我们先来了解一下PyAlink的设计背景:

基于这样的设计背景,我们来看下一现在Notebook上进行Alink开发的实践。

本地运行代码示例:

frompyalink.alinkimport*##一个Batch作业的例子useLocalEnv(2)##preparedataimportnumpyasnpimportpandasaspddata=np.array([[0,0.0,0.0,0.0],[1,0.1,0.1,0.1],[2,0.2,0.2,0.2],[3,9,9,9],[4,9.1,9.1,9.1],[5,9.2,9.2,9.2]])df=pd.DataFrame({"id":data[:,0],"f0":data[:,1],"f1":data[:,2],"f2":data[:,3]})inOp=BatchOperator.fromDataframe(df,schemaStr='iddouble,f0double,f1double,f2double')FEATURE_COLS=["f0","f1","f2"]VECTOR_COL="vec"PRED_COL="pred"vectorAssembler=(VectorAssembler().setSelectedCols(FEATURE_COLS).setOutputCol(VECTOR_COL))kMeans=(KMeans().setVectorCol(VECTOR_COL).setK(2).setPredictionCol(PRED_COL))pipeline=Pipeline().add(vectorAssembler).add(kMeans)pipeline.fit(inOp).transform(inOp).firstN(9).collectToDataframe()集群运行代码示例:

frompyalink.alinkimport*##一个Batch作业的例子useRemoteEnv("10.101.**.**",31805,2,shipAlinkAlgoJar=False)##preparedataimportnumpyasnpimportpandasaspddata=np.array([[0,0.0,0.0,0.0],[1,0.1,0.1,0.1],[2,0.2,0.2,0.2],[3,9,9,9],[4,9.1,9.1,9.1],[5,9.2,9.2,9.2]])df=pd.DataFrame({"id":data[:,0],"f0":data[:,1],"f1":data[:,2],"f2":data[:,3]})inOp=BatchOperator.fromDataframe(df,schemaStr='iddouble,f0double,f1double,f2double')FEATURE_COLS=["f0","f1","f2"]VECTOR_COL="vec"PRED_COL="pred"vectorAssembler=(VectorAssembler().setSelectedCols(FEATURE_COLS).setOutputCol(VECTOR_COL))kMeans=(KMeans().setVectorCol(VECTOR_COL).setK(2).setPredictionCol(PRED_COL))pipeline=Pipeline().add(vectorAssembler).add(kMeans)pipeline.fit(inOp).transform(inOp).firstN(9).collectToDataframe()我们可以看到本地和远程代码上的差别,就只有第4行代码不一样,本地使用的是useLocalEnv(2),远程使用的是useRemoteEnv("10.101..",31805,2,shipAlinkAlgoJar=False)。相较于本地环境,集群环境需要指定Flink集群的ip地址和端口。

本地运行示例:

集群运行模式中,流式任务和批式任务的设置有点差别,流式的任务需要指定本地的IP地址(localIp),我们使用Notebook进行交互式开发时,一般需要看到运行结果,批式任务使用Flink现有的机制,是可以直接看到运行结果的。但是流式任务数据流是无边界的,为了将流任务的运行结果返回回来,让用户可以实时看到,我们单独建立了一个通路进行数据传输,因此我们需要设置这个本地的IP地址,和集群进行交互。当然,这个本地IP地址的参数,在4月份的版本(Alink1.1.1版本)中,已经可以自动检测到了,可以省略掉了。

本节中,重点介绍两点PyAlink和PyFlink的兼容特性。

下面是一段Alink和PyFlink代码混用的示例:

###get_mlenv.pyfrompyalink.alinkimport*env,btenv,senv,stenv=getMLEnv()###使用PyFlink接口,与Table进行互转table=stenv.from_elements([(1,2),(2,5),(3,1)],['a','b'])source=TableSourceStreamOp(table)source.print()StreamOperator.execute()我们可以看到,使用PyFlink构建Table(第5行),可以直接转化为PyAlink的数据源算子(第6行)。

下面是提交任务的示例:

###直接运行脚本pythonkmeans.py###向集群提交作业PYFLINK_PATH=`python-c"importpyflink;print(pyflink.__path__[0])"`${PYFLINK_PATH}/bin/flinkrun-m10.101.**.**:31805-pykmeans.py-p4■读写Kafka我们在FlinkKafkaConnector基础上,为Kafka的输入输出包装了Source和Sink组件,让大家读写Kafka数据更加方便。下面是一个从数据读入,数据解析,对数据进行逻辑回归预测,将结果写入Kafka的任务的代码示例:

我们也可以看到,在Alink1.1.0这个版本中,数据的解析还是有一点麻烦,在本文后面的部分还会介绍对数据解析部分的简化,让整个流程更简洁。

本章开始,我们将详细介绍Alink1.1.1版本的一些优化的点,以及重要特性等。

在我们使用算法组件的时候,经常会遇到有些属性是枚举类型的,在Python中,一般是通过字符串输入枚举值,实际在使用的过程中,这些枚举值很难全部记住,经常需要去查询Alink的文档。为了我们编写代码更加顺畅,在新版本中,我们优化了代码的提示信息,我们可以尝试填写一个替代值,虽然会抛异常,但在运行结果中,可以看到枚举值的明确提示。

以卡方筛选算子为例,卡方筛选算子的SelectorType可以填写NumTopFeatures,Percentil,FPR等,是枚举类型变量,我们如果使用'aaa'值代替,看下会有什么效果,代码如下:

###Python代码selector=ChiSqSelectorBatchOp()\.setSelectorType("aaa")\.setSelectedCols(["f_string","f_long","f_int","f_double"])\.setLabelCol("f_boolean")\.setNumTopFeatures(2)在Alink1.1.1之前的版本,会返回下图:

异常信息中打出SelectorType输出错误的值AAA,但异常信息不明显,也没有指出是哪个参数写错了。

Alink1.1.1中,则会出现下图的结果:

异常信息中会有哪个参数填写错误,以及会提示可能的值是什么,这样我们使用Alink算子的时候更加便捷。

上面是Python代码的枚举类型的错误提示,对于JAVA来说,有代码自动提示,编写时会非常方便:

我们进行机器学习开发,算法中往往会有很多列名参数,列名输错情况很常见,如下图所示:

我们可能将text字段错误的写成了text1,在1.1.1版本里,不仅会指出哪列不存在,也会提示最可能的列名,帮助用户做修正,见下图所示。

这样,用户可以更快的定位错误,排查问题。JAVA的行为也相同:

输出提示如下:

我们在使用Python时,更多是用DataFrame来操作数据,在使用PyAlink时,有一个DataFrame向AlinkTable转换的过程,转换的速度会直接影响整个任务的执行时长,为了给用户一个比较好的用户体验,我们在转化上面,做了比较大的性能优化。

以下面的示例代码为例:

下面是一组JOSN格式的测试数据。

{"sepal_width":3.4,"petal_width":0.2,"sepal_length":4.8,"category":"Iris-setosa","petal_length":1.6}{"sepal_width":4.1,"petal_width":0.1,"sepal_length":5.2,"category":"Iris-setosa","petal_length":1.5}{"sepal_width":2.8,"petal_width":1.5,"sepal_length":6.5,"category":"Iris-versicolor","petal_length":4.6}{"sepal_width":3.0,"petal_width":1.8,"sepal_length":6.1,"category":"Iris-virginica","petal_length":4.9}{"sepal_width":2.9,"petal_width":1.8,"sepal_length":7.3,"category":"Iris-virginica","petal_length":6.3}我们需要将其解析为下图这样的结构化数据。

Alink1.1.1之前,我们可能需要编写下面这样的代码:

json_parser=JsonValueStreamOp().setSelectedCol("message").setOutputCols(["sepal_length","sepal_width","petal_length","petal_width","category"]).setJsonPath(["$.sepal_length","$.sepal_width",data=data.link(\JsonToColumnsStreamOp().setSelectedCol("message").setSchemaStr("sepal_lengthdouble,sepal_widthdouble,petal_lengthdouble,"+"petal_widthdouble,categorystring").setReservedCols([]))"$.petal_length","$.petal_width","$.category"])data=data.link(json_parser)data=data.select(\"CAST(sepal_lengthASDOUBLE)ASsepal_length,"+"CAST(sepal_widthASDOUBLE)ASsepal_width,"+"CAST(petal_lengthASDOUBLE)ASpetal_length,"+"CAST(petal_widthASDOUBLE)ASpetal_width,category")在Alink1.1.1版本中,我们添加了JsonToColumnsStreamOp组件,代码变成这样:

data=data.link(\JsonToColumnsStreamOp().setSelectedCol("message").setSchemaStr("sepal_lengthdouble,sepal_widthdouble,petal_lengthdouble,"+"petal_widthdouble,categorystring").setReservedCols([]))我们可以看到,代码精简了很多。

最后,介绍一个日志解析的例子,我们知道,日志的格式没有一个完整的规律,不是一个JSON格式,也不是KV格式,这就需要用现有工具进行组合来解决。

下面是一段日志记录的内容:

source.select("SUBSTRING(textFROM1ForPOSITION('['intext)-2)ASpart1,"+"REGEXT_EXTRACT(text,'(\\[)(.*)(\\])',2)ASlog_time,"+"SUBSTRING(textFROM2+POSION(']'INtext))ASpart2").link(newCsvToColumnBatchOp().setSelectCol("part1").setFieldDelimiter("").setSchemaStr("ipstring,col1string,col2string")).link(newCsvToColumnBatchOp().setSelectCol("part2").setFieldDelimiter("").setSchemaStr("cmdstring,responseint,bytesizeint,col3string,col4string")).link(newCsvToColumnBatchOp().setSelectCol("cmd").setFieldDelimiter("").setSchemaStr("req_methodstring,urlString,protocolstring")).select("ip,col1,col2,log_time,req_method,url,protocol,response,bytesize,col3,col4")上面的代码思路如下:

以上。Alink是基于Flink的机器学习算法平台,欢迎访问Alink的GitHub链接获取更多信息。也欢迎加入Alink开源用户群进行交流~

THE END
1.ePICEOpenSource215.9KB其它【ePICE开源项目详解】 ePICE,全称为\"Education Platform for Interactive Classroom and Extended Learning\",是一款开源的在线教育平台。它为教师和学生提供一个全方位的课程管理和交流工具,突破传统课堂时间和地点的限制,实现24/7的持续学习与互动。这个系统不仅允许教师上传和管理课程资料,如作业、讲义和笔记,还支持https://kaledl.com/down/8560057.html
2.基于Python的在线学习平台设计与实现毕业设计源码国外关于在线学习平台的研究比较广泛,主要涉及到平台的设计与实现、学习资源的开发与利用、学习交互的设计与实现、学习成果的评价等方面。目前,国外正在研究的主要有基于Java的在线学习平台、基于Python的在线学习平台、基于Web的在线学习平台等。基于Java的在线学习平台主要采用Servlet和JSP技术实现,并采用Struts和Spring等框https://blog.csdn.net/fufulove/article/details/144319334
3.AI从零到英雄:通过开源项目开始学习别担心,你并不孤单!许多人想了解 AI 工具,但不确定如何开始。本指南将帮助你了解五种有用的 AI 工具,它们可以帮助你在使用的时候又同时学习。 Postiz 是一款开源社交媒体调度工具,利用人工智能优化跨各个平台的内容发布。它简化了管理多个社交媒体帐户和有效安排帖子的过程。 https://www.21cto.com/article/1241711259137116
4.开放式在线学习平台edX全部开源开源软件2011年底,麻省理工学院发起一项开放式在线学习项目“MITx”,用于提供该学院的免费在线课程。去年5月份,哈佛大学也加入进来,与麻省理工学院一起推出了“edX”平台,该平台也提供哈佛大学的相关课程。 在edX平台宣布之初,曾承诺以开源软件的形式发布,以 MITx 为基础,其它感兴趣的大学和机构可自行托管其平台,或者帮助改进和https://www.iteye.com/news/27883
5.WLP在线学习平台WLP在线学习平台- WLP在线学习平台-开源版 --- 通过WLP在线学习平台获得线上学习能力,可辅助企业线下培训或将企业培训课件放置在系统中,方便用户随时随地在线学习。 每个课程可包含多个课时课件,课件支持PDF和mp4视频格式。 课程分类支持多级分类,灵活组织不同类型的http://wlp.wcpknow.com/
6.完全基于Java的开源深度学习平台,亚马逊的大佬带你上手HelloGitHub 推出的《讲解开源项目》[1]系列。有幸邀请到了亚马逊 + Apache 的工程师:Lanking( https://github.com/lanking520 ),为我们讲解 DJL —— 完全由Java构建的深度学习平台。 介绍 许多年以来,一直都没有为 Java 量身定制的深度学习开发平台。用户必须要进行繁杂的项目配置,构建 class 才能最终打造出https://cloud.tencent.com/developer/article/1824152
7.飞桨PaddlePaddle飞桨首次开源文字识别模型套件PaddleOCR,目标是打造丰富、领先、实用的文本识别模型/工具库。最新开源的超轻量PP-OCRv3模型大小仅为16.2M。同时支持中英文识别;支持倾斜、竖排等多种方向文字识别;支持GPU、CPU预测;用户既可以通过PaddleHub很便捷的直接使用该超轻量模型,也可以使用PaddleOCR开源套件训练自己的超轻量模型。https://www.paddlepaddle.org.cn/hub/scene/ocr
8.开源的API学习平台「GitHub热点速览」比如这款免费的 API 学习平台 APIHub,可以为初学者提供在线学习 API 开发的支持,并附有多种编程语言的示例。ChartDB 是一键生成数据库图表的工具,使用时无需输入数据库用户名和密码。Ophiuchi-desktop 让你在 5 秒内启动本地 HTTPS 代理,便于在本机上进行开发和测试。开源的 Android 虚拟定位应用 GoGoGo,一款帮https://hellogithub.com/article/a319e3b837184993a2c3cb3fc8283a15
9.CanvasLMSCanvas在线学习管理平台是美国Instructure公司于2011年推出的开源学习管理系统,因其系统界面设计简洁、操作简单易用、代码开源、数据分析功能强大及支持移动应用等特性,受到众多高校青睐。Canvas学习管理系统可以满足课程创建、资源管理、交流互动、学习评测、学习行为数据记录与分析、移动学习等各种教学需求,可支撑课堂教学、混合https://www.canvaslms.net/
10.w3cschool编程狮,是一个专业的W3C前端开发及编程入门学习平台,提供包括HTML,CSS,Javascript,jQuery,C,PHP,Java,Python,Sql,Mysql等编程语言和开源技术的在线教程及使用手册,是类国外w3schools的W3C学习社区及菜鸟编程平台。 网站数据 目前w3cschool的浏览人数已达到846,如需查询该站的相关权重数据,请点击[爱站数据],[Chinaz数据https://www.jspoo.com/wz/524.html
11.OSCHINAOSCHINA.NET 是目前领先的中文开源技术社区。我们传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台https://www.oschina.net/
12.字节跳动破局联邦学习:开源Fedlearner框架,广告投放增效209%作为分布式的机器学习范式,联邦学习能够有效解决数据孤岛问题,让参与方在不共享数据的基础上联合建模,挖掘数据价值。 近两年,联邦学习技术发展迅速,阿里、腾讯、百度、京东、蚂蚁金服、微众银行等一众互联网大厂、金融科技公司皆涉足其中。前不久,字节跳动联邦学习技术团队也开源了自研的联邦学习平台 Fedlearner 。 https://maimai.cn/article/detail?fid=1550604028&efid=zqj9rqK7Yf_Us-lu-0Wnmg
13.企业培训系统在线培训考试平台企业内训系统企业培训课程EduSoho企业大学致力于为公司定制开发企业在线培训系统,提供企业培训课程以及在线培训学习的一体化解决方案.主要业务涵盖:企业内训,企业培训系统,新员工入职培训,员工业务培训,在线学习平台,在线考试系统,在线移动学习,企业培训课程,elearning,网上学习平台https://ct.edusoho.com/
14.中国大学MOOC中国大学MOOC(慕课) 是爱课程网携手网易云课堂打造的在线学习平台,每一个有提升愿望的人,都可以在这里学习中国优质的大学课程,学完还能获得认证证书。中国大学MOOC是国内优质的中文MOOC学习平台,拥有众多985高校的大学课程,与名师零距离。http://icourse163.org/
15.java免费开源在线教育系统在线java开发java 免费开源在线教育系统 在线java开发 前言: 学成在线项目是传智燕青老师研发的JavaEE分布式微服务架构项目,采用SpringCloud框架研发,课程共20天,应广大学员的建议现将整个项目的技术点以问题的形式进行总结,方便大家学习总结。 1 学成在线是个什么样的项目?https://blog.51cto.com/u_16099279/6735784
16.首页汇学联盟IT在线学习平台汇学联盟在线学习中心是汇智动力旗下在线培训平台,开设java开发课程,软件测试课程,Python课程,自动化测试课程等IT课程。汇智动力结合多年线下教学经验,实时更新课程内容,实现线上、线下高效协同,只为给学员提供更加优质、丰富的课程内容和更专业、贴心的教学服务。https://www.hzdlstudy.com/