看数据与机器学习交互接口发展

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 从最早的RDD, 到编程版SQL的Data Frame, 再到标准的SQL, Spark和程序员的交互形态的发展变化, 也是整个数据行业发展的一个缩影。随着AI的发展,行业内普遍的做法是在python语言里集成了Data Frame, SQL。ML SQL则是一个颠覆者, 他希望SQL是顶级成员, 在SQL中内置Python, 并可通过集成Scala/Java对其进行扩展。

本文章由阿里云社群直播视频整理和而来。
讲师:祝威廉,资深数据架构,11年研发经验,同时维护和开发多个开源项目。

Stage1:分布式编程发展历程

1.MapReduce时代

大数据最开始的样子:MR(MR指:mapreduce,后文简称MR)在大数据领域的地位举足轻重,就不再赘述了。下面是一段使用MR编写的WordCount代码:

image.png

直观上看,这段代码粗糙,暴力且麻烦。在MR的初期,想要提交像如此简单的功能的代码,所需要的Jar包就有11个之多而且还有这么多的代码量,可想而知如果要搞一些复杂的需求与骚操作,简直是要累吐我这样的数据搬运工了。

当然我们MR的一个较大的弊端是用Java编写代码,又因为Java的表达能力相对较弱,这应该算是一个较大的短板。

MR时代我们会横向拓展机器,这是一个在当时比较新颖的理念,我们在横向拓展是并不要求机器的性能,项目初期,可以用尽量低的成本,用低性能且多数量的机器来支撑起我们的业务,也是很值得鼓吹的。当我们已现如今的知识储备与经验会看当时的想法,就会觉得它好low。就如同一个哲人曾经说过,今天的你如果没有觉得昨天的你很沙雕,那么你就没有进步。

2.Spark

技术是不断的进步的,上文我们说到MR是落后的,那么替代MR的就是我们接下来说到的Spark。用spark中的RDD(Resilient Distributed Dataset)来实现wordcount代码如下:

image.png

用了两行代码就替代了MR上面冗长的代码,简单且接近单机编程,spark都会有一个sc的入口,来进行对应的api调用。另一个优点就是不必如MR一般必须要在集群环境上进行调试没有很好地额交互性,spark是基于scala编写的,这里我们叫(spark-shell)也就可以边编写代码边调试查看效果,类似于python的notebook,给予了我们开发很大的帮助,且有了很多新的理念。spark还支持多语言编程,除了原生的scala,还支持python,Java等。

3.Ray

Ray是一个新的大数据平台:

image.png

看下上面的代码,首先init()方法会连接一个已有的集群,如果没有的话会自己启动一个集群。然后我们创建一个方法或者一个class,我们加上一个annotation标注这个方法为可以远程调用的。之后在调用的时候,其实是通过调用里面的remote方法。然后通过ray.get(futures)拉起一个多线程来跑程序。

Ray已经是非常非常接近单机编程,支持所见即所得,简单易用,原生支持python,可以很好的与AI整合,Ray为我们提供了更小的侵入性,更简单的代码实现。

蚂蚁金服提供了Java支持,可以通过Java来编写上面的代码

4.分布式发展历史总结

感性总结
1.MR/Spark 都是原生支持Java/Scala系的,Ray开始原生支持Python。

2.限制越来越少,MR要求你实现接口,Spark要求你从sparSession算子开始,Ray则只需要你定义函数/class的时候打个远程标记(另外还可以配置资源)。

3.启动延迟越来越低,可直接interpreter执行。

问题:平台变迁到底是什么东西在变化?
如下图:

image.png
image.png

基于以上图片我们可以看到一个趋势就是:Java与scala是MR与RDD的主力语言,python是AI的主力语言,大数据领域是Java与scala,AI则是python。Java与scala相对来说是面向平台,python则是面向用户。sql将会成为数据的主力。

问题:Ray是否会取代Spark吗?
首先分别了解一下这两个平台的架构:

image.png

通过对两个平台的对比分析,我们可以看出,他们两个是并列存在,目前并不存在谁取代谁的趋势。

核心总结:

1)Ray的python/java支持是并列的,互不影响。Spark的Python AP1是需要通过Java API的。

2)两者都分成了框架/应用,分布式编程系统分两个层(RDD==Ray Core)

3)Ray上的Python API自前主要面向机器学习,Java API还是面向传统的流,批等。

4)你可以基于Ray Java API实现类似现在的Flink APl,SQL执行引擎等,并且复用已有的大数据生态。

小结论:

1)两者体系结构类似。

2)Ray Core/RDD 都可以实现复杂的框架或者应用。

3)Ray可以实现Spark的所有功能,甚至实现一模一样的上层API(比如DataFrame等,甚至能复用更上一层的库比如MLL1b)。

4)Ray Core之上可以并行运行两套生态体系(Al,大数据)

那么到底能不能取代呢?理论上是可以的,但是还要看实际生态发展趋势。Ray可以做到All in one,会不会替代就要看Ray的发展了。

Stage2:Spark API交互发展历程

交互实际就是API,由下图来看一下Spark api演化

image.png

演化总结:

1)数据处理本质是集合操作。

2)SQL是集合操作语言的典范。

3)DataFrame/DataSet 是SQL通用语言服本。

4)DF/SQL是数据处理的事实标准。

5)Python可以写DF/DS,调用SQL,同时还可以支持机器学习学习各种库,所以Python语言成为王道。

整个API发战方向:

1)DataFrame/DataSet on python。

2)SQL。

为什么会有这样的方向?
1)数据处理本质是集合操作。

2)SQL/DF 易于无感知性能优化,可扩展性也还好。

3)Python作为C/C++的wrapper,同时是所有语音里学习成本最低的,非常适合做交互。

Stage3:从Application到Service突破一些常见模式

分布式编程的趋势:
1.越来越简单,越来越靠近单机编程。

2.执行延迟越来越低。

spark的两种运行模式:

1.提交spark程序到Yarn/k8s上,运行完成后结束就退出 Application模式。

2.Spark作为常驻程序,通过Thrift/Rest等接口提交任务 Service模式。

Ray只有一个模式:
service模式。

service模式的好处:

1)任务提交快(无进程申请,初始化等开销)。

2)执行速度快(AdHoc即席查询查询)。

3)负载均衡,集群的集群什么的都可以一起上。

4)满足数据分析如报表需求。

Service模式是一种进步。

Stage4:MLSQL是如何集大成,成为最好的分布式编程平台

MLSQL架构图:

image.png

MLSQL将会结合Spark以及Ray。

MLSQL代码示例:

image.png

MLSQL语言组成:

image.png

1.SQL 拓展版sql。

2.命令行 语法糖,本质也是sql。

3.python 内嵌于sql。

为什么要一个新语言?
1)算法-》80%的代码时SQL,20%的代码时Python。

2)研发,产品运营,分析师-》100%SQL(部分拓展使用Java/Scala)。

因为要让SQL成为头等公民,那么也就导致MLSQL应运而生。

一段典型的MLSQL脚本:

image.png

Java/Scala可以写SQL函数:

image.png

MLSQL特点:

1)简单-》SQL/命令行是一等公民,兼顾灵活可内嵌Python/Java/Scala。

2)内置权限=》 语言级别支持权限授权,一切资源都会抽象成表,精确到字段控制。

3)生态-》 可支持Spark/Ray之上的所有生态。

最后的建议:

1)请用Service模式。

2)分布式编程平台,Ray是趋势,但Spark生态够它继续辉煌。

3)Ray成为机器学习的Spark。

4)数据API标准是SQL(DataFrame/DataSet),Al是Python。

5)MLSQL作为一门新的面向算法和机器学习的语言,解释执行,内嵌权限,极度简化了大数据和A的应用们。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
3天前
|
机器学习/深度学习 数据采集 算法
数据分享|R语言机器学习预测案例合集:众筹平台、机票折扣、糖尿病患者、员工满意度
数据分享|R语言机器学习预测案例合集:众筹平台、机票折扣、糖尿病患者、员工满意度
|
4天前
|
数据采集
【大模型】大语言模型训练数据中的偏差概念及其可能的影响?
【5月更文挑战第5天】【大模型】大语言模型训练数据中的偏差概念及其可能的影响?
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
【AI 生成式】如何利用生成式人工智能进行机器学习的数据增强?
【5月更文挑战第4天】【AI 生成式】如何利用生成式人工智能进行机器学习的数据增强?
|
9天前
|
机器学习/深度学习 存储 数据采集
【Python 机器学习专栏】PCA(主成分分析)在数据降维中的应用
【4月更文挑战第30天】本文探讨了主成分分析(PCA)在高维数据降维中的应用。PCA通过线性变换找到最大化方差的主成分,从而降低数据维度,简化存储和计算,同时去除噪声。文章介绍了PCA的基本原理、步骤,强调了PCA在数据降维、可视化和特征提取上的优势,并提供了Python实现示例。PCA广泛应用在图像压缩、机器学习和数据分析等领域,但降维后可能损失解释性,需注意选择合适主成分数量及数据预处理。
|
9天前
|
机器学习/深度学习 Python
【Python机器学习专栏】时间序列数据的特征工程
【4月更文挑战第30天】本文探讨了时间序列数据的特征工程,强调其在捕捉季节性、揭示趋势、处理异常值和提升模型性能中的重要性。介绍了滞后特征、移动窗口统计特征、时间戳特征、频域特征和波动率特征等方法,并提供了Python实现示例。通过有效特征工程,可提高时间序列分析的准确性和预测可靠性。
|
9天前
|
机器学习/深度学习 计算机视觉 Python
【Python 机器学习专栏】图像数据的特征提取与预处理
【4月更文挑战第30天】本文探讨了图像数据的特征提取与预处理在机器学习中的重要性。图像数据具有大容量、信息丰富和冗余性高的特点。特征提取涉及颜色、纹理和形状特征;预处理包括图像增强、去噪和分割。Python的OpenCV和Scikit-image库在处理这些任务时非常有用。常见的特征提取方法有统计、变换和基于模型的方法,而预处理应注意保持图像真实性、适应性调整及验证评估。有效的特征提取和预处理能提升模型性能,Python工具使其更高效。
|
9天前
|
机器学习/深度学习 自然语言处理 算法
【Python机器学习专栏】文本数据的特征提取与表示
【4月更文挑战第30天】本文探讨了文本特征提取与表示在机器学习和NLP中的重要性。介绍了词袋模型、TF-IDF和n-gram等特征提取方法,以及稀疏向量和词嵌入等表示方式。Python中可利用sklearn和gensim库实现这些技术。有效的特征提取与表示有助于将文本数据转化为可处理的数值形式,推动NLP和机器学习领域的进步。
|
9天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】使用Scikit-learn进行数据编码
【4月更文挑战第30天】本文介绍了Python Scikit-learn库在机器学习数据预处理中的作用,尤其是数据编码。数据编码将原始数据转化为算法可理解的格式,包括标签编码(适用于有序分类变量)、独热编码(适用于无序分类变量)和文本编码(如词袋模型、TF-IDF)。Scikit-learn提供LabelEncoder和OneHotEncoder类实现这些编码。示例展示了如何对数据进行标签编码和独热编码,强调了正确选择编码方法的重要性。
|
9天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】数据标准化与归一化技术
【4月更文挑战第30天】在机器学习中,数据预处理的两大关键步骤是标准化和归一化,旨在调整数据范围以优化算法性能。标准化将数据缩放到特定区间,如[-1, 1]或[0, 1],适合基于距离的算法,如KNN、SVM。归一化则将数据线性变换到[0, 1],保持相对关系。Python中可使用`sklearn.preprocessing`的`MinMaxScaler`和`StandardScaler`实现这两种操作。选择哪种方法取决于数据分布和算法需求。预处理能提升模型理解和性能,增强预测准确性和可靠性。
|
9天前
|
机器学习/深度学习 数据采集 数据可视化
【Python 机器学习专栏】数据缺失值处理与插补方法
【4月更文挑战第30天】本文探讨了Python中处理数据缺失值的方法。缺失值影响数据分析和模型训练,可能导致模型偏差、准确性降低和干扰分析。检测缺失值可使用Pandas的`isnull()`和`notnull()`,或通过可视化。处理方法包括删除含缺失值的行/列及填充:固定值、均值/中位数、众数或最近邻。Scikit-learn提供了SimpleImputer和IterativeImputer类进行插补。选择方法要考虑数据特点、缺失值比例和模型需求。注意过度插补和验证评估。处理缺失值是提升数据质量和模型准确性关键步骤。