Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Scala 如何在repartitionAndSortWithinPartitions中定义作为元组的键类型的隐式排序?_Scala_Apache Spark - Fatal编程技术网

Scala 如何在repartitionAndSortWithinPartitions中定义作为元组的键类型的隐式排序?

Scala 如何在repartitionAndSortWithinPartitions中定义作为元组的键类型的隐式排序?,scala,apache-spark,Scala,Apache Spark,其目的是重新划分RDD[((Int,Double,Int)],并根据键中的第二个元素(即Double字段)在每个分区内进行排序。我尝试的是 implicit val ordering: Ordering[(Int, Double)] = Ordering.by(fk => (fk._1, fk._2 * -1)) 但是我得到了javaNullPointerException。以下是 org.apache.spark.SparkException: Job aborted due to s

其目的是重新划分RDD[((Int,Double,Int)],并根据键中的第二个元素(即Double字段)在每个分区内进行排序。我尝试的是

implicit val ordering: Ordering[(Int, Double)] = Ordering.by(fk => (fk._1, fk._2 * -1))
但是我得到了javaNullPointerException。以下是

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 27.0 failed 4 times, most recent failure: Lost task 0.3 in stage 27.0 (TID 2089, x01tbipapp3a): java.lang.NullPointerException
        at scala.math.Ordering$$anonfun$by$1.apply(Ordering.scala:219)
        at scala.math.Ordering$$anonfun$by$1.apply(Ordering.scala:219)
        at scala.math.Ordering$$anon$9.compare(Ordering.scala:200)
        at org.apache.spark.util.collection.WritablePartitionedPairCollection$$anon$3.compare(WritablePartitionedPairCollection.scala:86)
        at org.apache.spark.util.collection.WritablePartitionedPairCollection$$anon$3.compare(WritablePartitionedPairCollection.scala:80)
        at org.apache.spark.util.collection.TimSort.countRunAndMakeAscending(TimSort.java:252)
        at org.apache.spark.util.collection.TimSort.sort(TimSort.java:110)
        at org.apache.spark.util.collection.Sorter.sort(Sorter.scala:37)
        at org.apache.spark.util.collection.PartitionedPairBuffer.partitionedDestructiveSortedIterator(PartitionedPairBuffer.scala:78)
        at org.apache.spark.util.collection.ExternalSorter.partitionedIterator(ExternalSorter.scala:643)
        at org.apache.spark.util.collection.ExternalSorter.iterator(ExternalSorter.scala:654)
        at org.apache.spark.shuffle.hash.HashShuffleReader.read(HashShuffleReader.scala:107)
        at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:90)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
        at org.apache.spark.scheduler.Task.run(Task.scala:88)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
我确实觉得很含蓄

implicit val ordering: Ordering[(Int, Double)] = Ordering.by(fk => fk._2 * -1)

您不需要将内容放入隐式范围,也可以直接传递
排序对象。但我只是想知道为什么它不起作用。正如你从stacktrace中看到的,你的订单不适用。否则,您会看到一行代码指向您的
排序
实例。@reactormank,从stacktrace中,我看到了一个名为anonfun的排序被调用。我错了吗?是的,这是排序中的另一个函数。scala被调用。不是你的。