我在使用Spark reduceByKey / groupByKey函数时遇到了麻烦。
我有一对形式为(datetime, [a1, b1, c1, d1]), (datetime, [a2, b2, c2, d2]) ...
我想按键对这些元素进行分组(这里的日期时间相同),并获得与元素最小值列表对应的输出值。
以我的例子为例,输出为:
(datetime, [min(a1,a2), min(b1,b2), min(c1,c2), min(d1,d2)])
我试过了:
reduceByKey(lambda (a, b): [min(x) for x in zip(a, b)])
但到目前为止没有成功。
提前致谢
答案 0 :(得分:-1)
对于这个问题,我们有一个简单的解决方案。
在地图功能中,在减少之前。您应该像这样设置数据:
(datetime, ([a1, b1, c1, d1],))
请注意,我使用逗号将列表插入元组中。我正在做一个"开放"元组。因为它可以默认为reduceByKey
:
reduceByKey(lambda a, b: a + b)
你会得到这样的rdd:
(datetime, ([a1, b1, c1, d1], [a2, b2, c2, d2]))