Spark reducebykey - 列表元素的最小值
Posted
技术标签:
【中文标题】Spark reducebykey - 列表元素的最小值【英文标题】:Spark reducebykey - minimum of list element-wise 【发布时间】:2016-12-30 00:25:52 【问题描述】:我在使用 Spark reduceByKey / groupByKey 函数时遇到问题。
我有一对(datetime, [a1, b1, c1, d1]), (datetime, [a2, b2, c2, d2]) ...
形式的RDD
我想按键对这些元素进行分组(此处为相同的日期时间),并获得与元素最小值列表相对应的输出值。
在我的示例中,输出将是:
(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)])
但到目前为止没有成功。
提前致谢
【问题讨论】:
您的尝试乍一看还不错。 不成功到底是什么意思? 在尝试上述操作时,我收到了TypeError: <lambda>() takes exactly 1 argument (2 given)
错误。刚刚删除了 lambda 对象 (a,b) 的括号,似乎它正在工作.. 但我似乎无法理解为什么......无论如何谢谢!
哦,我错过了括号。使用lambda a, b: [min(x) for x in zip(a, b)]
【参考方案1】:
对于这个问题,我们有一个简单的解决方案。
在你的 map 函数中,reduce 之前。你应该像这样设置你的数据:
(datetime, ([a1, b1, c1, d1],))
请注意,我将列表插入到带有逗号的元组中。我正在做一个“开放”元组。而且你可以默认使用reduceByKey
:
reduceByKey(lambda a, b: a + b)
你会得到这样的rdd:
(datetime, ([a1, b1, c1, d1], [a2, b2, c2, d2]))
【讨论】:
这确实不能解决问题。 OP希望元素明智的最小值不分组。整个问题似乎是参数定义。以上是关于Spark reducebykey - 列表元素的最小值的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark - 在作为列表的 spark 数据框列上使用 reducebykey
Java spark使用reduceByKey避免嵌套列表将对象连接到一个列表中