You*_*ani 8 google-cloud-dataflow
我对使用Google Cloud Dataflow非常陌生.我想获得两个PCollections的笛卡尔积.举例来说,如果我有两个PCollections (1, 2)和("hello", "world"),它们的笛卡尔乘积是((1, "hello"), (1, "world"), (2, "hello"), (2, "world")).
任何想法我怎么能这样做?此外,由于笛卡尔积可能很大,我希望解决方案可以懒得创建产品,从而避免大量内存消耗.
谢谢!
通常,计算笛卡尔积将是昂贵的。如果其中一个(或两个)集合都适合存储在内存中,则可以使用侧面输入将数据广播给所有工作人员。因此,对于您的示例,您PCollection<String>将把ParDo它变成侧面输入,然后将其作为主要输入。对于主输入上的每个字符串,您可以访问具有Iterable<String>所有值中的一个的侧面输入,然后输出对(或者您可以在此DoFn选择中仅输出排队的对)。
每次都将在整个单词集上重新进行迭代-如果它适合内存,应该没问题。如果每次必须重新获取侧面输入数据,则可能会出现问题。
另一种方法是依靠改组和密钥。假设您要查找三个字母重叠的单词。您可以处理字典,并生成PCollection由3个字母的前缀键入的值的。您还可以创建PCollection由3个字母后缀键入的相似键。然后,您可以GroupByKey(或CoGroupByKey)。之后,对于每个3个字母的键,所有带有该单词作为前缀和后缀的单词。
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |