- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对使用 Google Cloud Dataflow 很陌生。我想得到两个 PCollections 的笛卡尔积。例如,如果我有两个 PCollections (1, 2)
和 ("hello", "world")
,他们的笛卡尔积是 ((1, "hello"), (1, "world"), (2, "hello"), (2, "world"))
.
任何想法我怎么能做到这一点?此外,由于笛卡尔乘积可能很大,我希望该解决方案能够懒惰地创建乘积,从而避免大量内存消耗。
谢谢!
最佳答案
一般来说,计算笛卡尔积会很昂贵。如果其中一个(或两个)集合适合内存,您可以使用 side-inputs将数据广播给所有 worker 。因此,对于您的示例,您将打开 PCollection<String>
进入一个侧面输入,然后你会有一个 ParDo
把它作为主要输入。对于主输入上的每个字符串,您可以访问具有 Iterable<String>
的侧输入。所有值中,您将输出对(或者您可以在此 DoFn
中选择仅输出排列的对)。
这将每次都重新迭代整个单词集——如果它适合内存,这应该没问题。如果每次都必须重新获取侧面输入数据,则可能会出现问题。
另一种方法是依靠改组和 key 。假设您想查找具有 3 个字母重叠的单词。你可以处理字典并产生一个PCollection
由 3 个字母前缀键控的值。您也可以创建类似的 PCollection
由 3 个字母的后缀键控。那么你可以GroupByKey
(或 CoGroupByKey
)。之后,对于每个 3 个字母的键,您都有所有以该为前缀和以该为后缀的单词。
关于google-cloud-dataflow - 如何获得两个 PCollection 的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35008721/
我是一名优秀的程序员,十分优秀!