是否存在每个项都是成员的列表?

2024-04-16 07:06:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试为一些Spark流作业编写一个抽象,每个Spark流作业都有一部分代码,它们之间的代码相同(因此需要一个抽象)。你知道吗

每个作业的格式如下:

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()阶段。每个作业中几乎总是有两个筛选阶段,但有时作业不需要它。我宁愿过滤器是冗余的,除了返回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...

这是可能的还是我必须从抽象中删除这些阶段,让开发人员编写作业来决定它们是否需要过滤器?你知道吗


Tags: lambda代码inselfeventtruemapfor
2条回答

如果我理解正确的话,您需要一个类似列表的对象,声明它包含任何对象。你知道吗

你需要定义一个list-like class。你知道吗

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

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

然后对于分配给anyValue的任何值:

>>> anyValue in MyList([])
True

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

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

相关问题 更多 >