2

尝试为数据流作业创建模板。

有没有办法生成带有运行时参数的模板?

到目前为止,在创建模板时使用了任何参数,但是当我尝试为变量传递不同的值时,它并没有选择运行时值。

如果需要任何其他详细信息,将提供相同的信息。

4

2 回答 2

2

您可以在管道选项中使用值提供程序以在管道中包含运行时参数。

但我担心这太局限在你可以使用这些参数的地方(主要在 DoFn 中)。

这种行为是数据流模板所期望的,因为它是管道的表示,而不是代码本身。

请记住,您不能根据传递的值创建具有动态处理步骤的数据流模板

这些步骤被硬编码到模板中,除非再次执行生成模板的代码,否则无法更改。

于 2018-09-07T18:48:30.057 回答
1

需要将参数包装在 ValueProvider 对象中,以便模板管道访问该参数的运行时值。此处提供的所有示例模板都演示了如何使用 ValueProvider 来参数化模板管道。

WordCount 管道为例。

如您所见,管道使用 ValueProvider(而不是简单的 String)来读取需要执行 WordCount 的文件的路径:

@Description("Path of the file to read from")
ValueProvider<String> getInputFile();
void setInputFile(ValueProvider<String> value);

由于 inputFile 的值在运行时之前是未知的(当模板实际使用有效输入执行时),使用 ValueProvider 的转换将延迟读取参数的值直到运行时(例如在 DoFn 内)。

除了从 String 读取之外,本机 TextIO.Read Beam 转换还支持从 ValueProvider 读取。

于 2018-09-10T17:49:27.043 回答