猿问

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

我有一个管道,它获取文件的 URL,并为除标题之外的每一行下载这些生成的 BigQuery 表行。

为避免重复下载,我想根据以前下载过的表格检查 URL,如果 URL 不在这个“历史”表中,则只继续存储该 URL。

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

我可以强制单线程执行(在一台机器上)来满足我的部分管道吗?

(在这一点之后,我的 100 个 URL/文件中的每一个都适合在单独的线程上处理;每个文件都会产生 10000-10000000 行,因此在这一点上进行限制几乎肯定不会产生性能问题。)


HUWWW
浏览 138回答 1
1回答

慕姐4208626

Beam 专为并行处理数据而设计,它会尝试明确阻止您进行同步或阻塞,除非使用一些内置原语,例如Combine。听起来你想要的是一个过滤器,它只在第一次看到元素(你的 URL)时发出它。您或许可以为此使用内置的Distinct 转换。此运算符使用组合键按键(在本例中为您的 URL)对元素进行分组,然后仅在第一次看到每个键时发出它。
随时随地看视频慕课网APP

相关分类

Java
我要回答