我可以强制我的数据流管道中的一个步骤是 single-threaded(并且在一台机器上)吗?

Can I force a step in my dataflow pipeline to be single-threaded (and on a single machine)?

我有一个管道需要 URLs 文件并下载这些生成 BigQuery table 行的每一行,除了 header。

为避免重复下载,我想对照 table 之前下载的 URL 进行检查,如果 URL 不在其中,则只继续存储它"history" table.

为此,我需要将历史记录存储在允许唯一值的数据库中,或者为此使用 BigQuery 可能更容易,但对 table 的访问必须严格串行。

我可以强制执行 single-thread 执行(在一台机器上)以满足我的部分管道的要求吗?

(在这一点之后,我的 URLs/files 的 100 中的每一个都将被 suitable 用于在单独的线程上处理;每个文件都会产生 10000-10000000 行,因此会受到限制点几乎肯定不会出现性能问题。)

Beam 专为并行处理数据而设计,它试图明确阻止您进行同步或阻塞,除非使用一些内置原语,例如 Combine

听起来你想要的是一个只在第一次看到元素(你的URL)时发出的过滤器。您可以为此使用内置的 Distinct transform。此运算符使用组合键按键(在本例中为您的 URL)对元素进行分组,然后仅在第一次看到时发出每个键。