我可以强制我的数据流管道中的一个步骤是 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)对元素进行分组,然后仅在第一次看到时发出每个键。
我有一个管道需要 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)对元素进行分组,然后仅在第一次看到时发出每个键。