3.3.5 VO-O语法- 高级语法

        VO语言还提供了一些个性化的高级语法特性,这些语法特性有别于传统的编程语言。但可以更好的帮助开发者实现高效、稳定的生产级数据流程。

调度运行

        在现行的编程语言中,调度运行不在语法表示范围之内。这属于具体的代码实现逻辑。但在VO语言设计中,调度运行是一种原生的特性。VO语言有别于图灵完备的通用开发语言,其属于面向数据科学的一种领域描述语言,是图灵不完备的,类似SQL语言。从诞生之日起,其就内置了算子调度运行的语义。VO语言解释器缺省为每个算子分配一个独立线程,确保数据流在算子间可并行执行,最大程度的确保程序的运行效率。这种语言设计可大大降低开发者的使用和学习成本,编写出的程序可直接满足数据科学类应用场景的性能需求。是VO语言带给开发者的一种语法糖。

        调度运行是通用容器算子流程算子提供的原生特性,在使用VO语言的开发过程中,你并不能拖拽一个流程算子,但流程算子始终存在。创建数据流程时,缺省会创建一个流程算子用于管理流程逻辑。当流程逻辑比较复杂,拖入了太多算子时,可以选中多个算子进行打包,形成一个内部函数,这个内部函数的容器就是一个流程算子。流程算子的外观如下图:

        通过点击流程算子的运行切换按钮来转换流程内的算子是以并行方式被调度,还是以串行方式被调度。串行方式执行时,容器内的所有算子共享同一个线程。是否选用串行方式运行时一般有2个前提,一是流程非常复杂,拥有几百个算子,如果并行运行势必会占用操作系统过多的线程资源。若同时有多个此类数据流程运行会导致物理机资源紧张,此时可以考虑是否切换为串行运行;二是被设计为串行运行的流程中不存在可能造成性能瓶颈的算子,算子逻辑都比较简单。此时可以考虑是否切换为串行模式,否则无需考虑切换运行方式。

水位线

        水位线是VO语言为数据集打上的数据标记。此概念与Spark、Flink中的水位线的概念基本一致,可以用来标记数据处理的进度。除此外,VO语言中的水位线还有类似事务边界的作用。VO语言中的任何算子在发现水位线变化时,都会从触发输出端口发出一个水位线变更的事件,从而触发后续算子的运行,形成一个类似事务的同步控制。被触发的算子会检查已收到的数据集的水位线是否包含触发事件中的水位线,若包含则触发算子运行。

        在数据流程中,可以通过“添加水位线”(AddWaterMark)算子和“清除水位线”( ClearWaterMark)算子来设置和清除水位线。这两个算子都无需参数配置。开发者在流程中加入“添加水位线”算子后,所有流经该算子的数据集都会被打上一个唯一的水位线标记。后续的算子对数据集的操作不会改变水位线标记。例如一个数据集拆分算子,若带水位线的集合被拆解成多个数据集,则每个数据集都有一个当前水位线的标记;如果是合并数据集,那么最后一个数据集的水位线会被标记在合并后的数据集上。

                        若算子有多个输入端口,需要对多个输入端口的数据集做聚合。VO没有强制语义要求两个数据入口的水位线必须相同才能做聚合。开发者应当自行确保参与计算的水位线的时序是相同的。合并后的数据集的水位线缺省使用的是算子图元最上面的那个数据端口的水位线。

水位线变量

        VO语言提供的开发场景中,目前只有数据集和算子参数。如果数据场景比较复杂,后续算子需要一个位置比较靠前的前置算子中信息时,就必须将这个信息放在数据集中向下传输。尽管这个信息可能对绝大多数算子来说都无用,但仍需耗费一定的存储和CPU时间去传递和复制这些信息。有一些Workflow及数据科学工具就采用了这种方案。但这种方案太过冗余。

        VO语言为解决此类问题,为水位线加入了一个水位线变量的概念。可以通过“添加水位线变量”(AddWaterMarkVariable)算子将数据流中需要的参数信息存入水位线变量,在后续的算子中,通过getWMV(paramName)函数获取水位线对应的参数值。在这里,可以视每个水位线都有一个自己的变量存储空间。当算子调用getWMV(paramName)时,获取的是当前水位线空间内的参数值。

        如上图,设置水位线变量把CSV读取算子输出的文件名(streamName)重新命名为fileName,保存在了水位线空间中,而后流程删除了streamName列,又使用列添加算子添加了streamName列,并用水位线变量中的fileName参数值作为列的缺省值。使用getWMV函数时需要注意,不能直接使用参数名fileName,必须使用'fileName'。因为,在算子的语境中,所有的变量都是指数据集的列名。由于水位线变量会占用一定的存储空间,对于数据量较大的数据流程,可以使用“清除水位线变量”(ClearWaterMarkVariable)算子清除掉不再有用的水位线变量。

数据复制

        VO语言的解释运行被设计为效率优先,即数据集在传输过程中,如果一个算子的输出端口同时接了多个算子的输入端口,那么每个算子收到的数据集是同一个数据集。如果后续算子都只是读取数据集而不对数据集进行维护,则不会有任何问题。否则,当多个算子同时维护同一个数据集时,就会引发数据不一致的问题。此时,开发者需要显示的加入数据集复制算子,确保后续的数据集操作彼此不产生冲突。

数据集复制

        数据集复制算子不需要配置参数,会根据连接的算子数自动为每一个数据集复制数据集,确保每个算子都获得一个独立的数据集。

数据流复制

        VO语言的算子中有一类特殊的数据集,就是数据流集合。这类数据集由于数据流本身的不可重读性,所以输出端口缺省只能有一个合法的数据连接。如果希望一个数据流集合可以同时被多个后续算子访问,需要在流程中加入一个数据流复制算子。该算子无需配置参数,与数据集复制算子一样,其也可根据输出端口连接的算子数量自动复制数据流集合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984602.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NLP文本分析之依存句法分析(理论及技术实践)

引言 在自然语言处理(NLP)领域中,理解句子的语法结构是实现语义理解的基础。依存句法分析(Dependency Parsing) 作为句法分析的核心任务之一,通过揭示句子中词语之间的依存关系,为机器翻译、信…

LeetCode hot 100—爬楼梯

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例…

RoboVQA:机器人多模态长范围推理

23 年 11 月来自 Google Deepmind 的论文“RoboVQA: Multimodal Long-Horizon Reasoning for Robotics”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案,该方案可用于长期和中期的高级推理,与传统的狭窄自上而下的逐步收集相比&#xff0c…

WWDG窗口看门狗原理

WWDG(窗口看门狗)在窗口期喂狗 作用: 原理: 框图 WWDG寄存器: WWDG_CR控制寄存器 WWDG_CFR配置寄存器 状态寄存器WWDG_SR 超时时间计算公式 最小最大超时值 HAL配置函数: 1. IWDG 和 WWDG 的区别 IWDG&…

基于Flink SQL的实时指标多维分析模型

数据流程介绍 1.创建源表kafka接入消息队列数据,定义字段映射规则; 2.创建目标表es_sink配置Elasticsearch输出; 3.通过多级视图(tmp→tmp_dedup→tmp1/tmp2→tmp3→tmp_groupby)实现数据清洗、去重、状态计算&#x…

超分之DeSRA

Desra: detect and delete the artifacts of gan-based real-world super-resolution models.DeSRA:检测并消除基于GAN的真实世界超分辨率模型中的伪影Xie L, Wang X, Chen X, et al.arXiv preprint arXiv:2307.02457, 2023. 摘要 背景: GAN-SR模型虽然…

UIToolkit(一)

1 前言 UI Toolkit 是一种基于 Web 技术的 GUI 框架,是为了解决 UGUI 效率问题而设计的新一代 UI 系统(UGUI 的介绍详见→UGUI概述)。与 UGUI 不同,UI Toolkit 没有采用 GameObject 的方式,而是参考了 Web 技术的 XML …

Unsloth - 微调 Phi-4 + 修复 Bug

文章目录 Phi-4 错误修复1、分词器错误修复2、微调错误修复3、聊天模板问题 💡 我们的问题修复有效吗?🦙 Llama-fication🦥 动态 4 位量化🛠️ Finetuning Phi-4性能基准测试 本文翻译自:Phi-4 Finetuning …

多视图几何--对极几何--从0-1理解对极几何

1对极几何 1.1本质矩阵 1.1.1几何约束与推导 如图所示,物体点 P P P,图像点 p 1 , p 2 p_1,p_2 p1​,p2​,相机中心 o 1 , o 2 o_1,o_2 o1​,o2​五点共面的关系称为对极几何。 o 1 , o 2 o_1,o_2 o1​,o2​连线称为基线,其与图像的交点称为…

SpringBoot3.3.0集成Knife4j4.5.0实战

原SpringBoot2.7.18升级至3.3.0之后,Knife4j进行同步升级(Spring Boot 3 只支持OpenAPI3规范),从原3.0.3(knife4j-spring-boot-starter)版本升级至4.5.0(knife4j-openapi3-jakarta-spring-boot-starter),以下是升级过程与注意事项等 版本信息…

一招解决Pytorch GPU版本安装慢的问题

Pytorch是一个流行的深度学习框架,广泛应用于计算机视觉、自然语言处理等领域。安装Pytorch GPU版本可以充分利用GPU的并行计算能力,加速模型的训练和推理过程。接下来,我们将详细介绍如何在Windows操作系统上安装Pytorch GPU版本。 查看是否…

Linux——system V共享内存

共享内存区是最快的IPC(进程内通信)形式,不再通过执行进入内核的系统调用来传递彼此的数据 1.共享内存的原理 IPC通信的本质是让不同的进程先看到同一份资源,然后再进行通信,所以想要通过共享内存进行通信,那么第一步一定是让两个…

初识数组

数组的大概内容(自学)上篇 数组的创建和赋值 创建: int [] name new int [5]; int name [] new int [5]; int [] name {1,2.3,4,5}; 赋值: int [] score {1,2,3}; int [] score new int [] {1,2,3}; int [] score;//声明 score new int []…

OSPF-单区域的配置

一、单区域概念: 单区域OSPF中,整个网络被视为一个区域,区域ID通常为0(骨干区域)。所有的路由器都在这个区域内交换链路状态信息。 补充知识点: OSPF为何需要loopback接口: 1.Loopback接口的…

c++介绍锁二

锁主要在两个以上的线程中使用&#xff0c;当多个线程访问共享资源时&#xff0c;我们需要使用锁&#xff0c;开保证共享资源的唯一性。 当两个线程访问不带锁的共享资源时&#xff0c;如下代码 #include<array> #include<thread> #include<iostream> usin…

Ubuntu系统部署.NET 8网站项目

一、使用XShell连接 Ubuntu系统初次连接时默认的用户名为&#xff1a;ubuntu&#xff0c;使用此用户名与系统登录密码进行连接。 登录成功效果如下图&#xff1a; 二、root用户登录 linux下有超级用户&#xff08;root&#xff09;和普通用户&#xff0c;普通用户不能直接操…

学习资料电子版 免费下载的网盘网站(非常全!)

我分享一个私人收藏的电子书免费下载的网盘网站&#xff08;学习资料为主&#xff09;&#xff1a; link3.cc/sbook123 所有资料都保存在网盘了&#xff0c;直接转存即可&#xff0c;非常的便利&#xff01; 包括了少儿&#xff0c;小学&#xff0c;初中&#xff0c;中职&am…

图形编辑器基于Paper.js教程24:图像转gcode的重构,元素翻转,旋转

前段时间在雕刻图片时&#xff0c;旋转图片&#xff0c;翻转图片后&#xff0c;发现生成准确的gcode&#xff0c;虽然尺寸对&#xff0c;但是都是以没有旋转&#xff0c;没有翻转的图片进行生成的。后来思考了一下&#xff0c;发现这真是一个大bug&#xff0c;无论图片如何选择…

无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战

文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课&#xff0c;而如何在Linux系统上高效地访…

一文了解汽车图像传感器

2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…