我目前正在尝试为一些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的书面作业来决定他们是否需要一个过滤器或不?
我不完全理解你的问题,在Python列表可以''a = ['a',5,int,(lambda:1 + 2),map]; 5 in a - > True; 'a'in - > True' –
事情是我们不知道列表中可能包含什么,您检查会员资格的东西可以是任何东西,我希望它在列表中。这有帮助吗? –
啊,好吧,如果你把它转换成列表,但是重载'__contains__'的对象可以模拟包含每个可能的值。 –