Spark - sortBy和sortByKey之间的区别

时间:2016-02-01 16:05:22

标签: apache-spark

Spark中的sortBysortByKey函数有什么区别?

我正在使用sortBy& sortByKey。两者都给出了相同的结果,然后有什么不同。

val reducedSfpd = sfpd.map(x => (x(col_2),1)).reduceByKey((x,y) => x+y)

val top3Dist = reducedSfpd.sortBy(_._2,false).collect().take(3)    
val top3Dist = reducedSfpd.map(x => x.swap).sortByKey(false).take(3)

sortBy&& amp;之间是否存在性能相关的差异sortByKey。

事实上,当我使用sortBy时,我正在保存一个交换“键 - 值”的转换。通过应用地图功能。那么为什么sortByKey

1 个答案:

答案 0 :(得分:6)

  

事实上,当我使用sortBy时,我正在保存一个交换“键 - 值”的转换。通过应用地图功能。

你不是。在实践中,您添加了一个额外的转换,并在途中略微增加了网络流量。 sortBy maps输入RDD到(f(x), x)对,适用sortByKey,最后需要values。我怀疑它会影响性能,但肯定要记住。

虽然使用sortBy会使您的意图更加明显sortByKey输出分区RDD,这对下游处理非常有用。

在旁注中,我既不使用sortBy也不使用sortByKey来提取顶部元素。相反,最好选择top

reducedSfpd.top(3)(Ordering.by[(K, Int), Int](-_._2))

takeOrdered

reducedSfpd.takeOrdered(3)(Ordering.by[(String, Int), Int](_._2))

具有特定顺序,其中K是密钥的类型。