数据流:是否可以同步 运行 管道的一部分,而异步地处理其他部分?
Dataflow: is it possible to run parts of the pipeline synchronously and other parts asynchronously?
我正在设置看起来像这样的简单数据流管道:
Pipeline p = Pipeline.create(options);
p.apply(TextIO.Read.from("source.csv"))
.apply(ParDo.of(new TransformEachLine()))
.apply(ParDo.of(new ProcessEachTransform()));
p.run();
如何让 TransformEachLine
的每次迭代等待 ProcessEachTransform
的每次迭代完成相应 TransformEachLine
迭代生成的所有元素?此外,如何使 TransformEachLine
的每次迭代按顺序执行(如源“.csv”文件中所示)
基本上,对我来说重要的是水平缩放和随机化 ProcessEachTransform
,但不是同时前两个 ParDo
。
现在,这个管道的假设输出看起来像这样:
Line B
Processed item 2
Processed item 1
Processed item 3
Line A
Processed Item 3
Processed Item 1
Processed Item 2
Line C
Processed Item 1
Processed Item 3
Processed Item 2
如何按顺序对齐 "Line XX",但在每个 "Line XX" 中保持 "Processed Item XX" 随机和平行?这是否意味着我必须在本地执行部分代码并将其他部分发送到 Dataflow 进行并行处理?
听起来您实际上需要完全按照输入文件中指定的顺序进行处理。
这不是您可以在 Beam 中直接表达的内容 API:PCollection 元素的处理始终是并行且无序的 - 您需要 运行 每个事务都作为单个管道按顺序(尽管如果事务数量很少——最多数百个——你可以在管道本身的结构中表达顺序,比如每个事务 1 个转换和一些使转换按顺序执行的连接——让我知道你是否想知道这个,我会编辑我的答案)。
请注意,Beam 模型也不保证多少次 一个元素将被处理(例如,运行ner 可以多次处理一个元素在重试失败或为了冗余的情况下),因此您还需要使一个事务中的项目处理是幂等的。
我正在设置看起来像这样的简单数据流管道:
Pipeline p = Pipeline.create(options);
p.apply(TextIO.Read.from("source.csv"))
.apply(ParDo.of(new TransformEachLine()))
.apply(ParDo.of(new ProcessEachTransform()));
p.run();
如何让 TransformEachLine
的每次迭代等待 ProcessEachTransform
的每次迭代完成相应 TransformEachLine
迭代生成的所有元素?此外,如何使 TransformEachLine
的每次迭代按顺序执行(如源“.csv”文件中所示)
基本上,对我来说重要的是水平缩放和随机化 ProcessEachTransform
,但不是同时前两个 ParDo
。
现在,这个管道的假设输出看起来像这样:
Line B
Processed item 2
Processed item 1
Processed item 3
Line A
Processed Item 3
Processed Item 1
Processed Item 2
Line C
Processed Item 1
Processed Item 3
Processed Item 2
如何按顺序对齐 "Line XX",但在每个 "Line XX" 中保持 "Processed Item XX" 随机和平行?这是否意味着我必须在本地执行部分代码并将其他部分发送到 Dataflow 进行并行处理?
听起来您实际上需要完全按照输入文件中指定的顺序进行处理。
这不是您可以在 Beam 中直接表达的内容 API:PCollection 元素的处理始终是并行且无序的 - 您需要 运行 每个事务都作为单个管道按顺序(尽管如果事务数量很少——最多数百个——你可以在管道本身的结构中表达顺序,比如每个事务 1 个转换和一些使转换按顺序执行的连接——让我知道你是否想知道这个,我会编辑我的答案)。
请注意,Beam 模型也不保证多少次 一个元素将被处理(例如,运行ner 可以多次处理一个元素在重试失败或为了冗余的情况下),因此您还需要使一个事务中的项目处理是幂等的。