Spark中的sortBy
和sortByKey
函数有什么区别?
我正在使用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
?
答案 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
是密钥的类型。