apache beam入门之程序入口——PipelineOption

2023-10-28

前置章节apache beam入门宝典之初次使用

从第一章里我们看到最开始需要生成1个PipelineOption,然后才能生成1个Pipeline, 而这个所谓的option用处是将可以将程序输入的args数组转成1个PipelineOption对象, 然后就能直接从里面进行get和set操作了,不需要自己再去编写输入参数转化相关的实体类。

简单应用例子

我们直接先以例子入手,先自定义1个MyTestOption类

public interface MyTestOption extends PipelineOptions {
String getMyName();
void setMyName(String myName);
}

getMyName和setMyName2个接口定义之后,其实就是定义了1个myName的arg输入参数(即get和set后面的那个单词,第一个字母小写)。

接着编写如下代码

public static void main(String[] args) {
MyTestOption myTestOption = PipelineOptionsFactory
// 读入args数组,不一定来自main函数入口
.fromArgs(args)
// withValidation指需要对args里的所有参数做校验,如果有不存在Option里的参数键值就会抛异常
.withValidation()
// withoutStrictParsing指不需要做校验,可以有不存在Option里的参数输入
//.withoutStrictParsing()
// 通过as进行最后的生成操作
.as(MyTestOption.class);

String myName = myTestOption.getMyName();
System.out.println("myName=" + myName);
myTestOption.setMyName("helloWorld");
System.out.println("myName=" + myTestOption.getMyName());
}

然后启动程序时,加入–myName=lsx的输入参数(不要忘记2个横杠)

在这里插入图片描述
则最后输出如下:
在这里插入图片描述

关键用途1:可以贯穿整个计算过程,不需要自己再编写各计算过程的传入实体

当然,光在main里去调用这个get和set,用处并不大,很多时候我们并不一定要通过输入参数args的方式去获取1个VO对象。
PipelineOption的关键用处在于可以贯穿整个数据集计算过程中。
以下面这个DoFn转换类为例,我们可以在DoFn中,通过从context去取出Option,来获取需要的参数,而不需要给ReplaceMyNameFn定义新的私有成员进行参数传递。

/**
* 替换名字的转换过程
*/
public static class ReplaceMyNameFn extends DoFn<String, String> {
@ProcessElement
public void processElement(ProcessContext context) {
String inputElement = context.element();

// 从MytestOption中获取需要的元素
MyTestOption myTestOption = context.getPipelineOptions().as(MyTestOption.class);
String myName = myTestOption.getMyName();

// 替换字符串
String outputElement = inputElement.replace(myName, "xxx");
context.output(outputElement);
}
}

关键用途2: 计算引擎关联

我们演示时,用的都是DirectRunner(可以理解为本地单机计算引擎)。
如果我们想要用spark进行计算呢? 那么就需要给程序的输入参数里加上 --runner=SparkRunner (不加的时候都默认为DirectRunner), 那么计算时才能转成spark引擎进行计算。 通过PipelienOption源码,我们确实可以看到定义了setRunner和getRunner这2个接口
在这里插入图片描述

关键用途3: 用接口替代VO类,方便进行各种合并组装

在我曾开发的beam工程中,会因为任务类型的不同, 要生成不同的TaskOption, 但是TaskOption中又有一些Option是可以共用的,此时通过extend一些共有的接口,就可以实现参数复用,避免重复定义一些原有参数。

public interface CleanTaskOption extend BasicTaskOption, ReadOption{...}
public interface QualityTaskOption extend BasicTaskOption, ReadOption{...}

pipelineOption的一些常用注解

public interface MyTestOption extends PipelineOptions {
@Default.String("lsx")
@Description("this is name.")
String getMyName();
void setMyName(String myName);
}

默认值Default.类型, 当args数组中未包含该参数时,使用该默认值
描述Description, 当不清楚对应Option需要那些参数时,可以通过输入–help=对应Option全类名进行查看,例如我要查看MyTestOption需要哪些输入参数,可在执行时输入
在这里插入图片描述

则会输出其定义的参数以及其父接口的参数描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

apache beam入门之程序入口——PipelineOption 的相关文章

  • 实实在在万事达!实在智能助力山东万事达集团加速数智化转型

    近日 杭州实在智能科技有限公司 以下简称 实在智能 与山东建筑钢市场 领头羊 山东万事达控股有限公司 以下简称 万事达集团 召开 RPA 机器人流程自动化 项目启动会 实在智能携手万事达集团 联合共建财务RPA一体化研发管理项目 以下简称
  • 2023年终盘点:Apache SeaTunnel社区年度成就与展望

    随着2023年即将画上圆满的句号 是时候回顾过去一年Apache SeaTunnel社区的辉煌成就和宝贵经验 在这充满挑战和机遇的一年里 我们的社区不断壮大 技术不断进步 成就斐然 展望2024年 展望来年 Apache SeaTunnel
  • HOOPS助力AVEVA数字化转型:支持多种3D模型格式转换!

    行业 电力和公用事业 化工 造船 能源 采矿业 挑战 创建大规模复杂资产的客户需要汇集多种类型的数据 以支持初始设计和创建强大的数字双胞胎 现有版本的产品只支持半打CAD格式 有限的内部开发资源限制了增加对新格式支持的能力 解决方案 HOO
  • 8大数字技术打造ESG发展新范式!工业“双碳”建设应该这么做

    随着国家 双碳 目标的提出 数字化 绿色化证进入历史交汇 协同发展 路径合一 相辅相成的重要阶段 在此背景下 中国信通院 中国航天航空 工业互联网产业联盟于2022年联合出版了 数字技术赋能工业碳达峰碳中和应用指南 以下简称 指南 今年又细
  • 【flink番外篇】9、Flink Table API 支持的操作示例(1)-完整版

    Flink 系列文章 一 Flink 专栏 Flink 专栏 系统介绍某一知识点 并辅以具体的示例进行说明 1 Flink 部署系列 本部分介绍Flink的部署 配置相关基础内容 2 Flink基础系列 本部分介绍Flink 的基础部分 比
  • 海豚²来了丨DolphinDB 集成 DolphinScheduler,任务调度更轻松

    DolphinDB 是一款高性能时序数据库 DolphinDB 集成了功能强大的编程语言和高容量高速度的批流一体数据分析系统 为海量数据 特别是时间序列数据 的快速存储 检索 计算及分析提供一站式解决方案 在实际生产环境中 经常存在 数据导
  • 广告竞价策略:激发广告变现潜能的关键

    在数字化时代 广告已经成为企业推广品牌 产品和服务的关键手段之一 为了最大程度地发挥广告的效果 广告竞价策略成为广告主和数字营销专业人士关注的焦点 通过巧妙运用竞价策略 广告主可以在激烈的市场竞争中脱颖而出 实现广告变现的潜能 admaoy
  • Spark 中 BroadCast 导致的内存溢出(SparkFatalException)

    背景 本文基于 Spark 3 1 1 open jdk 1 8 0 352 目前在排查 Spark 任务的时候 遇到了一个很奇怪的问题 在此记录一下 现象描述 一个 Spark Application Driver端的内存为 5GB 一直
  • 医疗机构如何释放数据要素价值 推动数据资产化

    在智慧医院建设加速的今天 数据已经成为医疗机构核心的资产之一 无论是基于数据的智慧运营决策 还是医疗AI模型训练与推理 都需要大规模数据的利用 在近日国家数据局等17部门联合印发的 数据要素 三年行动计划 2024 2026年 中 要求医疗
  • 从不同维度的调研数据,看企业数字化转型

    数字化转型逐渐成为企业增长和价值创造的新引擎 然而 在复杂的背景下 企业数字化转型也面临着前所未有的挑战和机遇 未来 我们还能做些什么 怎么做 这成为了各企业高管当前亟需厘清的问题 企业做数字化转型的原因 总体来看 大部分受访企业做数字化转
  • AI大模型应用入门实战与进阶:深入理解Transformer架构

    1 背景介绍 自从2017年的 Attention is All You Need 一文发表以来 Transformer架构已经成为自然语言处理 NLP 领域的主流模型 这篇文章将深入探讨Transformer架构的核心概念 算法原理以及实
  • 机器学习与人类智能的融合:未来趋势与挑战

    1 背景介绍 人工智能 Artificial Intelligence AI 是指一种以计算机程序为代表的智能方法 可以理解 学习和应用人类智能的某些方面 机器学习 Machine Learning ML 是人工智能的一个子领域 它涉及到计
  • 心灵与计算机:解密情感处理

    1 背景介绍 情感处理是人工智能领域中一个重要的研究方向 它旨在使计算机能理解 识别和处理人类的情感 情感处理的主要应用包括情感分析 情感识别 情感挖掘等 随着大数据 深度学习和自然语言处理等技术的发展 情感处理技术已经取得了显著的进展 然
  • 流程管理的未来:人工智能如何改变业务运行

    1 背景介绍 流程管理是企业在实现业务目标时所采取的一系列有序 连贯的活动 它涉及到许多领域 如生产 销售 研发 财务等 随着企业规模的扩大和市场竞争的激烈 流程管理的复杂性也不断增加 人工智能 AI 技术的发展为流程管理提供了新的机遇 有
  • 人工智能与模式识别的社会影响与应用

    1 背景介绍 人工智能 Artificial Intelligence AI 和模式识别 Pattern Recognition PR 是计算机科学领域的两个重要分支 人工智能研究如何让计算机具有类似人类智能的能力 如学习 推理 理解自然语
  • 人工智能与机器学习:未来的编程范式

    1 背景介绍 人工智能 Artificial Intelligence AI 和机器学习 Machine Learning ML 是现代计算机科学的重要领域之一 它们旨在让计算机能够自主地学习 理解和进化 以解决复杂的问题 随着数据量的增加
  • 问CHAT很繁琐的问题会不会有答案呢?

    问CHAT 什么已有的基于极值理论的极端温度重现期主要针对极端高温事件 对极端低温事件研究较少 CHAT 回复 为这主要可能是由于以下几个原因 1 气候变化与全球变暖 当前 全球变暖和气候变化的问题备受关注 这导致科研者更加关注极端高温事件
  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • CorelDRAW2024官方中文版重磅发布更新

    35年专注于矢量设计始于1988年并不断推陈出新 致力为全球设计工作者提供更高效的设计工具 CorelDRAW 滋养并见证了一代设计师的成长 在最短的时间内交付作品 CorelDRAW的智能高效会让你一见钟情 CorelDRAW 全称 Co
  • 两个月进口猛增10倍,买近百台光刻机,难怪ASML不舍中国市场

    据统计数据显示 2023年11月和12月 中国从荷兰进口的光刻机设备同比猛增10倍 进口金额超过19亿美元 让ASML赚得盆满钵满 ASML早前表示中国客户在2023年订购的光刻机全数交付 2023年11月中国进口的光刻机达到42台 进口金

随机推荐

  • android调用本地js文件上传,原生JS实现前端本地文件上传

    本文实例为大家分享了JS实现前端本地文件上传的具体代码 供大家参考 具体内容如下 通过input type file来选择本地文件 var fileInput document querySelector file input fileIn
  • VS+CUDA 新建项目里没有CUDA选项(附详细图文步骤)

    版权声明 本文为CSDN博主 Xav Zewen 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net weixin 39591031 article detai
  • 美国网站服务器有哪些,可以搭建什么网站?

    和我们国内的服务器一样 美国网站服务器可以分为 美国虚拟主机 美国独立服务器 美国VPS服务器 美国服务器又可分为大带宽服务器 站群服务器和高防服务器 其中美国云服务器最为常用 虽然美国距离国内较远 数据请求 访问速度会较慢 但其它配置和性
  • 前端鼠标形状设置--cursor

    前端鼠标形状设置 cursor 前端鼠标形状设置 可以通过设置cursor属性来修改 在Vue项目中 改变鼠标形状设置 在index html中写入下面的代码即可 body cursor url favicon ico default 效果
  • 后端返回数据给前端乱码

    我用的是谷歌的浏览器 其他的浏览器未知 我后端返回数据给前端 发现在谷歌浏览器调试中出现乱码 但是页面没有出现乱码 如下图所示 防止出现这种情况可以在代码中加上 response setContentType application jso
  • 怎么求点云的投影面积

    要求点云的投影面积 需要先将点云数据转换成三维模型 然后使用三维几何学算法求出模型的表面积 具体方法可以使用计算几何库 如 CGAL 或者利用三维建模软件 如 Rhino Blender 等 进行计算 投影面积可以通过投影三维模型到二维平面
  • 预览Base64文件

    预览Base64格式的图片 previewPicture fileBase64 let newWindow window open newWindow document write img src 预览Base64格式的pdf previe
  • Java简易图书管理系统开发全过程 (1)

    引言 今天班里的图书角管理员抱怨 这借书流程太繁琐了 我便善 装 良 杯 地说 那我开发个图书管理软件吧 于是便有了这个 Java简易图书管理系统开发全过程 1 引言 开发环境搭建 底层逻辑构思 开发环境搭建 我打算使用Java Swing
  • 空间与运动——简单太阳系+牧师与魔鬼

    作业内容 一 简答并用程序验证 1 游戏对象运动的本质是什么 2 请用三种方法以上方法 实现物体的抛物线运动 3 简单太阳系 二 编程实践 1 脚本设计 2 效果图 一 简答并用程序验证 1 游戏对象运动的本质是什么 游戏对象的运动是物体随
  • unity技能冷却

    本文转载自http blog csdn net liang 704959721 article details 44961757 在游戏中一般都会用到冷却技能 CD 实现的方式一般都是遮罩 你可以自己写遮放的方法 或者用shader实现 使
  • 交叉编译arm版本rsync工具

    交叉编译arm版本rsync工具 自动安装脚本 下载源码 解压源码 配置编译 安装 复制到开发板 使用rsync 命令参数 配置文件 参考博客 自动安装脚本 bin sh BUILD HOST arm linux gnueabihf ARM
  • 操作系统知识整理——Linux下进程的内存布局以及brk()、sbrk()函数探究

    文章目录 前言 一 内存堆栈模型 二 系统栈和用户栈 三 函数调用时的内存栈分配 四 brk sbrk 用法详解 前言 本篇文章是自己在学习xv6操作系统内核时 发现自己对进程在内存中的布局知识点上还是有一些混淆不清 所以在这里做一些补充整
  • 华为OD机试 - 解密犯罪时间(Java)

    题目描述 警察在侦破一个案件时 得到了线人给出的可能犯罪时间 形如 HH MM 表示的时刻 根据警察和线人的约定 为了隐蔽 该时间是修改过的 解密规则为 利用当前出现过的数字 构造下一个距离当前时间最近的时刻 则该时间为可能的犯罪时间 每个
  • 正确使用cocoaPods 在OC中集成Charts第三方库

    之前的看到的都是错误的 正确的步骤如下 1 安装cocoaPods 2 新建一个OC工程 3 pod init 到 vi Podfile Uncomment the next line to define a global platform
  • MySQL主从、集群模式简单介绍

    目录 1 主从模式 Replication 2 集群模式 3 主从模式部署注意事项 主从模式 集群模式 都是在一个项目中使用多个mysql节点进行存储和读取数据 当单机模式部署 不满足安全性 高可用 高并发等需求的时候 就需要考虑主从模式或
  • 超详细的Git使用教程(图文)

    一 Git概述 1 1 Git历史 Git 诞生于一个极富纷争大举创新的年代 Linux 内核开源项目有着为数众多的参与者 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上 1991 2002年间 到 2002 年
  • leecode-寻找重复数字

    题目 题目 分析 哇哦 原来vector可以这样初始化 学到了 不初始化会直接报错嘞 代码 class Solution public int findDuplicate vector
  • 企业微信使用高德地图获取定位报错:INVALID_USER_SCODE(无效用户代码)

    解决方案 1 在html头部放你创建的高德安全密钥 2 完整代码如下
  • JAVA高级知识点整理

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 String字符串类 String 可变字符串 StringBuilder 可变字符串与String之间的转换 RunTime类 概述 特点 使用 Data类
  • apache beam入门之程序入口——PipelineOption

    前置章节apache beam入门宝典之初次使用 从第一章里我们看到最开始需要生成1个PipelineOption 然后才能生成1个Pipeline 而这个所谓的option用处是将可以将程序输入的args数组转成1个PipelineOpt