我的起点是使用Apache Spark的Scala中的RDD [(键,值)]。 RDD包含大约1500万个元组。每个键大约有50 + -20个值。
现在我想为每个键取一个值(无关紧要)。我目前的做法如下:
基本上看起来像这样:
...
candidates
.groupByKey()
.map(c => (c._1, c._2.head)
...
分组是昂贵的部分。它仍然很快,因为没有网络随机播放,候选人在内存中,但我可以更快地完成吗?
我的想法是直接在分区上工作,但我不确定我从HashPartition中获得了什么。如果我采用每个分区的第一个元组,我会得到每个密钥,但是根据分区的数量,可能只有一个密钥的多个元组?或者我会错过钥匙吗?
谢谢!
答案 0 :(得分:2)
reduceByKey
如何使用返回第一个参数的函数?像这样:
candidates.reduceByKey((x, _) => x)