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)的结果;