Apache spark apachespark:对小集合在collect之前还是之后对结果进行排序?
标题几乎说明了一切 例如,在中,他们定义了这两种方法:Apache spark apachespark:对小集合在collect之前还是之后对结果进行排序?,apache-spark,Apache Spark,标题几乎说明了一切 例如,在中,他们定义了这两种方法: def rankLangsUsingIndex(index: RDD[(String, Iterable[WikipediaArticle])]): List[(String, Int)] = { index.map(...) .sortBy(pair => pair._2) // <- sortBy BEFORE collect .collect() .toList .reverse }
def rankLangsUsingIndex(index: RDD[(String, Iterable[WikipediaArticle])]): List[(String, Int)] = {
index.map(...)
.sortBy(pair => pair._2) // <- sortBy BEFORE collect
.collect()
.toList
.reverse
}
def rankLangsReduceByKey(langs: List[String], rdd: RDD[WikipediaArticle]): List[(String, Int)] = {
rdd.flatMap(...)
.reduceByKey(_ + _)
.collect()
.toList
.sortWith(_._2 > _._2) // <- sort AFTER collect
}
def rankLangsUsingIndex(索引:RDD[(字符串,Iterable[WikipediaArticle])):列表[(字符串,Int)]={
index.map(…)
.sortBy(pair=>pair.\u 2)//.\u 2)/这取决于您想要实现的目标。
我认为,在代码中对收集的输出进行排序几乎没有意义,但也不应该有什么区别
如果你的数据足够大,这将产生影响——那么你不应该一开始就收集数据。
如果您的数据足够小,那么您可能希望能够以动态/交互方式进行排序,而以硬排序的方式进行排序没有什么意义,而是希望在前端内部进行排序
除非出于某种原因,您正在收集数十万条驱动程序条目,否则没有必要以分布式方式进行排序
实际上,我的建议是:使用任何你认为更容易维护的API。在这个例子中,反向使用会使代码稍微受阻,所以我可能更喜欢第二个。
支持以分布式方式进行排序的一个原因是,如果在查询的其余部分进行排序(通过围绕Spark query optimizer编写的本地排序)可以获得一些好处,那么可能需要做两次工作