Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对Spark Scala中包含5个元素的元组RDD进行排序?_Scala_Sorting_Apache Spark_Rdd - Fatal编程技术网

如何对Spark Scala中包含5个元素的元组RDD进行排序?

如何对Spark Scala中包含5个元素的元组RDD进行排序?,scala,sorting,apache-spark,rdd,Scala,Sorting,Apache Spark,Rdd,如果我有一个包含5个元素的元组RDD,例如。, RDD(双精度、字符串、整数、双精度、双精度) 如何使用第五个元素对RDD进行有效排序 我尝试将此RDD映射到键值对并使用sortByKey,但看起来sortByKey相当慢,它比我收集此RDD并在收集的数组上使用sortWith慢。为什么是这样 非常感谢。您可以通过直接作用于RDD来执行此操作: myRdd.sortBy(_._5) // Sort by 5th field of each 5-tuple 有额外的可选参数来定义排序顺序(“升序

如果我有一个包含5个元素的元组RDD,例如。, RDD(双精度、字符串、整数、双精度、双精度)

如何使用第五个元素对RDD进行有效排序


我尝试将此RDD映射到键值对并使用sortByKey,但看起来sortByKey相当慢,它比我收集此RDD并在收集的数组上使用sortWith慢。为什么是这样


非常感谢。

您可以通过直接作用于
RDD
来执行此操作:

myRdd.sortBy(_._5) // Sort by 5th field of each 5-tuple

有额外的可选参数来定义排序顺序(“升序”)和分区数。

sortByKey是Spark 1.0的唯一分布式排序


您试图对多少数据进行排序?少量将导致更快的本地/集中分拣。如果您尝试对GB和GB的数据进行排序,而这些数据甚至可能不适合单个节点,这就是Spark的亮点所在

如果要按降序排序&如果对应元素的类型为int,则可以使用“-”符号按降序对RDD进行排序

例如:

我有一个带有(String,Int)的元组RDD。要按第二个元素降序排列此RDD

rdd.sortBy(x => -x._2).collect().foreach(println);
rdd.sortBy(x => x._2, false).collect().foreach(println);
我有一个元组的RDD,带有(String,String)。要按第二个元素降序排列此RDD

rdd.sortBy(x => -x._2).collect().foreach(println);
rdd.sortBy(x => x._2, false).collect().foreach(println);

“它比我收集这个RDD并在收集的数组上使用sortWith要慢。”当然是这样。如果你收集数据,所有的数据都在一个节点上,然后你在内存中进行排序,Spark是针对不适合一个节点的大数据集,与单节点计算相比,它有一个(相当大的)开销。如果您没有那么大的数据集,您可能不想使用Spark。这不是一个神奇的“让事情变得更快”的解决方案。谢谢你的解释。谢谢你的回复。我在RDD上尝试了sortBy,但它返回了一个错误:value sortBy不是org.apache.spark.RDD.RDD[(Double,String,Int,Double,Double)]的成员。我使用的是Spark 1.0.1,这就是原因吗?看起来可能是-
sortBy
似乎可以追溯到Spark 1.1.x版感谢您的回复。谢谢。我排序的数据不是很大,可以在内存中处理。也许我应该将数据排序为数组/列表,而不是RDD。