DoFn. Setup
用于准备处理元素包的实例的方法的注释。
使用单词“bundle”,接受零个参数。
DoFn。用于准备实例以处理一批元素的方法的StartBundle注释。
使用单词“batch”,接受零个或一个参数(
StartBundleContext,一种访问管道选项的方法)。
我需要在DoFn实例中初始化一个库,然后对“batch”或“bundle”中的每个元素使用该库。我通常不会对这两个词吹毛求疵,但在管道中,可能会有一些不同?
匿名用户
DoFn的生命周期如下:
设置
- 重复处理捆绑包:
StartBundle
- 重复
ProcessElement
FinishBundle
一、 e.DoFn的一个实例可以处理多个(零个或多个)bundle,并且在一个bundle中,它可以处理多个(零个或多个)元素。
安装程序和启动捆绑包都是可选的-可以在不使用它们的情况下实现任何DoFn,并且只在ProcessElement中执行工作,但是效率很低。这两种方法都允许优化:
- 通常需要在元素之间批处理工作,例如,不是对每个元素执行RPC,而是对N个元素的批执行RPC
StartBundle
/FinishBundle
告诉您批处理的允许边界:基本上,您不允许跨FinishBundle
-FinishBundle
批处理必须强制刷新批处理(并且StartBundle
必须初始化/重置批处理)。这是我所知道的这些方法的唯一常见用法,但如果您对更一般或更严格的解释感兴趣,那么捆绑包是容错的一个单元,并且运行程序假定,当FinishBundle返回时,您已经完成了与该捆绑包中所有元素相关的所有工作(输出元素或执行副作用);捆之间的作业不得“泄漏”
- 通常需要管理长期存在的资源,例如网络连接。您可以在StartBundle/
FinishBundle
中执行此操作,但与挂起的副作用或输出不同,这些资源可以在bundle之间保留。这就是设置和拆卸的目的
- 通常还需要执行代价高昂的DoFn初始化,例如解析配置文件等。这也最好在设置中完成
更简洁地说:
- 在
Setup
/Teardown
中管理资源和昂贵的初始化。
- 管理
StartBundle
/FinishBundle
中的工作批处理。
(在捆绑方法中管理资源效率低下;在安装/拆卸中管理批处理显然不正确,并将导致数据丢失)
DoFn文档最近进行了更新,以使这一点更加明确。
在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM以前在这里保存它的类。在Java 8中,它被移除并被称为元空间的区域所取代。 PermGen和Metaspace之间最重要的区别是什么? 我知道的唯一区别是,并且忽略了VM参数。
和之间有什么区别? 是什么原因导致他们被扔?如何解决这些问题? 在修改现有代码以包含新的jar文件时,我经常会遇到这些可抛物。我在通过WebStart发布的一个Java应用程序的客户端和服务器端都碰到了它们。 我遇到的可能原因是: 代码客户端的中未包含的包 我们正在使用的新JAR缺少运行时类路径 版本与以前的JAR冲突 当我今天遇到这些问题时,我会采取跟踪和错误的方法来使事情正常工作。我需要更多的
当我试图在Spring4.x上进行测试时,我使用了MockMvc web客户端,但我正在阅读和尝试Spring5.x的新特性。 我认为,WebTestClient和MockMvc是相同或非常相似的。 MockMvc和WebTestClient之间的区别是什么?
有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?
问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型
给定以下从静态编程语言Koans中提取的代码: 我自己的解决方案使用了。两者都适用于koan场景。 和的文档似乎非常相似。 这两个功能有什么区别?