2016-05-30 43 views
0

我目前正在尝试为一些Spark Streaming作业写一个抽象,每个作品都有一部分代码,它们之间都是相同的(因此需要抽象)。存在每个项目都是成员的列表?

每个作业的格式的格式如下:

dStream \ 
     .filter(lambda rec: rec[self.EVENT_KEY_VALUE[0]] in list(self.EVENT_KEY_VALUE[1])) \ 
     .filter(lambda rec: self.EVENT_FIELDS.issubset(set(rec.keys()))) \ 

for INPUT in INPUTS: 
     dStream \ 
      .map(lambda rdd: format_record_keys_for_salesforce(self.INPUT)) 

for map_func in OPTIONAL_MAPS: 
     dStream \ 
      .map(map_func) 

return dStream.map(self.OUTPUT.project_row) 

总是有format_record_keys_for_salesforce图阶段,总是dStream.map(self.OUTPUT.project_row)阶段。问题来自前两个filter() s。每项工作几乎总是有两个过滤阶段,但有时候这项工作并不需要它。我宁愿让过滤器变得多余,什么也不做,只能返回True,而不是开发者必须编写额外的代码。

那么,我该如何编写一个list,其中任意值是它的成员呢?我们事先并不知道这些值,只是它是列表中的成员。

有点像:

>> 'a' in list(all) 
True 
>> 5 in list(all) 
True 
>> *anything* in list(all) 
True 
>> ALL_NATURAL_NUMBERS in list(all) 
True 
>> ALL_SUBSETS_OF_NATURAL_NUMBERS in list(all) 
True 
etc... 

这是可能的,或者我会从我的抽象删除这些阶段,把它留给dev的书面作业来决定他们是否需要一个过滤器或不?

+0

我不完全理解你的问题,在Python列表可以''a = ['a',5,int,(lambda:1 + 2),map]; 5 in a - > True; 'a'in - > True' –

+0

事情是我们不知道列表中可能包含什么,您检查会员资格的东西可以是任何东西,我希望它在列表中。这有帮助吗? –

+1

啊,好吧,如果你把它转换成列表,但是重载'__contains__'的对象可以模拟包含每个可能的值。 –

回答

1

如果我正确理解你,你需要一个类似列表的对象,声称它包含任何对象。您需要定义list-like class

我能想到的最简单的解决方案是一个肮脏的黑客:

class MyList(list): 
    def __contains__(self, item): 
     return True 

然后分配给anyValue任何值:

>>> anyValue in MyList([]) 
True 
2

如果我理解正确,那么您只是想模拟__contains__运算符。所以可能是这样的:

class MockList(list): 
    def __contains__(self, item): 
     return True 
相关问题