【发布时间】:2019-06-17 14:19:39
【问题描述】:
我有一个包含大量 KeyVal 条目的 RDD。同一个键将出现多次,我有兴趣为每个键提取前 N 个条目。作为 Spark 的新手,到目前为止我还无法弄清楚如何做到这一点,因此我们将不胜感激。
输入可能如下所示:
rdd = sc.parallelize([('a',1),('a',2),('b',3),('a',5),('b',4),('b',6)])
例如,每个键的前 2 个条目所需的最终输出:
output = {'a':[1,2], 'b':[3,4]}
如果我一般只对前 n 个条目感兴趣,我当然可以将 take(n) 应用于初始 RDD。我正在寻找的是一种类似于 take(n) 函数的方法,但迭代每个键。如果我可以创建一个仅包含原始 RDD 所需子集的 RDD,那就没问题了。事后收集到字典不是问题。
所以中间输出(RDD 风格)将是:
[('a',1),('a',2),('b',3),('b',4)]
如何在 PySpark 中实现这一点?
编辑:建议的重复问题特别需要使用 reduceByKey 的解决方案,这在这种情况下不是必需的。
【问题讨论】:
标签: python apache-spark pyspark