下面的代码将数据作为 Python 中的默认字典返回,输出如下:
defaultdict(<type 'list'>, {'[0, 13, 26, 39]': ['1']})
defaultdict(<type 'list'>, {'[0, 13, 26, 39]': ['1']})
defaultdict(<type 'list'>, {'[6, 19, 32, 45]': ['1']})
defaultdict(<type 'list'>, {'[3, 16, 29, 42]': ['1']})
如何在上面的输出中获得重复的键?
不应该是这样吗:
defaultdict(<type 'list'>, {'[0, 13, 26, 39]': ['1', '1']})
defaultdict(<type 'list'>, {'[6, 19, 32, 45]': ['1']})
defaultdict(<type 'list'>, {'[3, 16, 29, 42]': ['1']})
我正在运行的代码是
def make_bands(value):
d2 = defaultdict(list)
for key, val in value.iteritems():
d2[(str(list(val[0:4])))].append("1")
print d2
value是另一本字典
调用函数
make_bands
来处理Spark RDD,如下所示:
signatureBands = signatureTable.map(lambda x: make_bands(x)).collect()
首先,不,你不能期望输出是你想要的。 d2 在调用之间不保留。每次进入该函数时都会重新创建它。如果你使用一个类来保存状态、一个生成器(这在这里不太优雅)或者一个构造函数而不是 lambda 的函数(这将是我在这里的选择),你仍然可以获得你想要的东西:
def build_make_bands():
d2 = defaultdict(list)
def make_bands(value):
for key, val in value.iteritems():
d2[(str(list(val[0:4])))].append("1")
print d2
return make_bands
然后你可以这样称呼它:
signatureTable.map(build_make_bands()).collect()