作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 P-Collection,如下所示
P1 = ['H','E','L','L','O','W','O','R','L','D']
P2 = ['W','E','L','C','O','M','E']
如果第一个集合中存在元素,我想将其排除在第二个集合中以获得以下结果
Result = ['H','R','D']
执行此操作的优化和快速方法是什么?
最佳答案
使用CombinePerKey
:https://beam.apache.org/documentation/programming-guide/#combine
代码:
P1 = [('H', 'P1'), ('E', 'P1'), ('L', 'P1'), ('L', 'P1'), ('O', 'P1'), ('W', 'P1'), ('O', 'P1'), ('R', 'P1'), ('L', 'P1'), ('D', 'P1')]
P2 = [('W', 'P2'), ('E', 'P2'), ('L', 'P2'), ('C', 'P2'), ('O', 'P2'), ('M', 'P2'), ('E', 'P2')]
将 2 个 p 集合拼合在一起
将扁平化的 p 集合传递到 CombinePerKey
,使用 CombineFn
标记字符串是否同时包含 p1 和 p2:
代码:
class IsInBoth(apache_beam.core.CombineFn):
def _add_inputs(self, elements, accumulator=None):
accumulator = accumulator or self.create_accumulator()
for obj in elements:
if obj == 'P1':
accumulator['P1'] = True
if obj == 'P2':
accumulator['P2'] = True
return accumulator
def create_accumulator(self):
return {'P1': False, 'P2': False}
def add_input(self, accumulator, element, *args, **kwargs):
return self._add_inputs(elements=[element], accumulator=accumulator)
def add_inputs(self, accumulator, elements, *args, **kwargs):
return self._add_inputs(elements=elements, accumulator=accumulator)
def merge_accumulators(self, accumulators, *args, **kwargs):
return {
'P1': any([i['P1'] for i in accumulators]),
'P2': any([i['P2'] for i in accumulators])}
def extract_output(self, accumulator, *args, **kwargs):
return accumulator
CombinePerKey
中筛选出具有 {'P1': True, 'P2': True}
关于google-cloud-dataflow - Google Dataflow - 从另一个 PCollection<String> 中排除一个 PCollection<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51564811/
我是一名优秀的程序员,十分优秀!