让我们假设,我在Spark中有一个键值对,如下所示。
[ (Key1, Value1), (Key1, Value2), (Key1, Vaue3), (Key2, Value4), (Key2, Value5) ]
现在我想减少这个,就像这样。
[ (Key1, [Value1, Value2, Value3]), (Key2, [Value4, Value5]) ]
即,从Key-Value到Key-List of Values。
如何在python中使用map和reduce函数呢?
答案 0 :(得分:1)
这就是map和reduce的用途!首先将所有值设为长度列表,然后按键减少。这是一个经过测试的例子:
pane.add(label, 0, 0, 2, 1);
答案 1 :(得分:0)
>>> rdd = sc.parallelize([("a1","b1","c1","d1","e1"), ("a2","b2","c2","d2","e2")])
>>> result = rdd.map(lambda x: (x[0], list(x[1:])))
>>> print result.collect()
[('a1', ['b1', 'c1', 'd1', 'e1']), ('a2', ['b2', 'c2', 'd2', 'e2'])]
lambda x的解释:(x [0],list(x [1:])):
x [0]将使第一个元素成为输出的第一个元素
x [1:]将使除第一个元素外的所有元素都在第二个元素中
list(x [1:])将强制其为列表,因为默认值为元组
答案 2 :(得分:-1)
使用map
和reduce
这样做肯定是可能的,但肯定是混淆的练习。迭代地执行它很容易:
lists={} # key -> list of values
output=[]
for k,v in input:
l=lists.get(k)
if l is None:
l=lists[k]=[]
output.append((k,l)) # empty for now
l.append(v)
备注(因为仅从一个示例中获取要求很难):
[(k1,v1),(k2,v2),(k1,v3)]
等列表,其中并非所有k1
对都相邻。output
列表。