Java-Spark-Tuple2的自定义比较器<;字符串,字符串>;它不起作用了

Java-Spark-Tuple2的自定义比较器<;字符串,字符串>;它不起作用了,java,apache-spark,rdd,comparator,Java,Apache Spark,Rdd,Comparator,我有这样的想法: JavaPairRDD<String,String> inputFiles = sc.wholeTextFiles(inputFolderPath, PARTITIONS); JavaRDD<Tuple2<String, String>> intermediateInputFiles = JavaRDD.fromRDD(inputFiles.rdd(), null); List<Tuple2<String, String>&

我有这样的想法:

JavaPairRDD<String,String> inputFiles = sc.wholeTextFiles(inputFolderPath, PARTITIONS);
JavaRDD<Tuple2<String, String>> intermediateInputFiles = JavaRDD.fromRDD(inputFiles.rdd(), null);
List<Tuple2<String, String>> localInputFiles = intermediateInputFiles.collect();
    Collections.sort(localInputFiles, new Comparator<Tuple2<String, String>>() {

        @Override
        public int compare(Tuple2<String, String> o1, Tuple2<String, String> o2) {
            // TODO Auto-generated method stub
            return o1._1().compareTo(o2._1());
        }

    });
javapairdd inputFiles=sc.wholeTextFiles(inputFolderPath,分区);
JavaRDD intermediateInputFiles=JavaRDD.fromRDD(inputFiles.rdd(),null);
List localInputFiles=intermediateInputFiles.collect();
如您所见,localInputFiles具有元组,第一个元素是文件名,第二个元素是该文件的全部内容。 我可以打印该集合中的每个文件名。 然后我想通过Collections.sort对列表进行排序(根据文件名,所以我只对tuple的第一个元素感兴趣),但是由于Tuple2没有默认的比较器,所以我对它进行如下排序:

JavaPairRDD<String,String> inputFiles = sc.wholeTextFiles(inputFolderPath, PARTITIONS);
JavaRDD<Tuple2<String, String>> intermediateInputFiles = JavaRDD.fromRDD(inputFiles.rdd(), null);
List<Tuple2<String, String>> localInputFiles = intermediateInputFiles.collect();
    Collections.sort(localInputFiles, new Comparator<Tuple2<String, String>>() {

        @Override
        public int compare(Tuple2<String, String> o1, Tuple2<String, String> o2) {
            // TODO Auto-generated method stub
            return o1._1().compareTo(o2._1());
        }

    });
Collections.sort(localInputFiles,新的Comparator(){
@凌驾
公共整数比较(Tuple2 o1,Tuple2 o2){
//TODO自动生成的方法存根
返回o1._1()。与(o2._1())相比;
}
});
Tuple2._1()顺便说一句,返回一个字符串,所以我使用了字符串比较。 在此之后,我无法打印localInputFiles列表的元素

这个代码有什么问题

编辑:排序之后,我想spark上下文会自动关闭,或者发生一些不同的事情。我甚至不能在排序后打印“Hello World”。也许它崩溃是因为内存(因为在那个列表中,我保存着文件的内容。)然而,Spark UI说作业成功完成了


一些解释:我在wholeTextFiles之后使用了sortByKey,它当然有效,但我想知道为什么我不能在驱动程序中对该列表进行排序。

你能显示错误吗?运行时没有错误。排序后我无法访问列表元素。它甚至不打印System.out.println(localInputFiles==null)的结果;