我的RDD在分隔符下划线('')之前有一些字符。我需要遍历每个键并删除分隔符之前的所有内容,包括下划线,并保留重复的键值对(如果有的话)。我有一些代码删除重复项,但这不起作用。您可以看到第二条记录中的“bin1 ”和“None_”如何具有相同的键值,因此在函数后将删除一条键值。我需要保留那些重复项,以便以后通过值按键爆炸。下面是我的RDD和输出代码:
>>> rdd3.take(2)
[{u'bin1_11394071': 1, u'bin1_11052103': 1, u'bin1_11052101': 1}, {u'bin1_11847272': 10, u'bin1_999999': 1, u'None_11847272': 10}]
>>> rdd4 = rdd3.map(lambda x : {k.split('_')[1]:v for k,v in x.iteritems()})
>>> rdd4.take(2)
[{u'11394071': 1, u'11052101': 1, u'11052103': 1}, {u'999999': 1, u'11847272': 10}]
答案 0 :(得分:0)
你可以尝试这样的事情。定义一个函数(这个名为trim_prefix
),它返回一个元组列表而不是像这样的字典:
def trim_prefix(x):
l = []
for k,v in x.iteritems():
l.append((k.split('_')[1],v))
return l
然后针对该函数运行您的地图:
rdd4 = rdd3.map(lambda x : trim_prefix(x))
这会产生一个元组列表列表,而不是字典列表:
rdd4.take(2)
[[(u'11394071', 1), (u'11052103', 1), (u'11052101', 1)],
[(u'11847272', 10), (u'999999', 1), (u'11847272', 10)]]