gpt4 book ai didi

python - Spark中通过reduceByKey()或其他函数来减少作业?

转载 作者:行者123 更新时间:2023-11-30 23:06:03 24 4
gpt4 key购买 nike

给出以下列表:

[(0, [135, 2]), (0, [2409, 1]), (0, [12846, 2]), (1, [13840, 2]), ...]

如果列表值的第二个元素是每个键,我需要输出列表值的第一个元素的列表(即, 135, 2409, 12846 对于键 013840 对于键 1 ) (即, 2, 1, 2 代表 02 代表 1 )大于或等于某个值(假设为 2)。例如,在这种特殊情况下,输出应该是:

[(0, [135, 12846]), (1, [13840]), ...]

元组(0, [2409, 1])被丢弃,因为 1 < 2 .

我通过应用 groupByKey() 实现了这一点,一个mapValues(list)最后一个map功能,但很清楚groupByKey()效率低于reduce函数。

仅使用 reduceByKey() 是否可以实现该任务?或combineByKey()功能?

最佳答案

答案是肯定的:) 您可以使用 reduceByKey 实现与使用 groupByKey 相同的效果。事实上,reduceByKey 应该始终受到青睐,因为它在打乱数据之前执行映射端归约。

使用 reduceByKey 的解决方案(在 Scala 中,但我确信您明白这一点,并且如果您愿意,可以轻松地将其转换为 Python):

val rdd = sc.parallelize(List((0, List(135, 2)), (0, List(2409, 1)), (0, List(12846, 2)), (1, List(13840, 2))))
rdd.mapValues(v => if(v(1) >= 2) List(v(0)) else List.empty)
.reduceByKey(_++_)

关于python - Spark中通过reduceByKey()或其他函数来减少作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32863963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com