Apache Spark RDD和Java 8:异常处理
问题描述:
如果我在使用Java 8和Spark迭代文件内容时遇到任何异常,我需要跳过该记录。Apache Spark RDD和Java 8:异常处理
我不想抛出异常,我只需要跳过该记录并继续其他记录。
代码示例:
JavaRDD<Model> fileRDD = sc.textFile("filePath")
.map(line -> {
try {
String[] parts = line.split("\\|");
Long key = Long.parseLong(parts[0];
return line;
} catch (NumberFormatException nfe) {
//if i throw RuntimeException, its working file
//but i dont want to throw exception, i want to just skip the line,
// how do i do it using java 8 stream methods
}
});
答
可以使用filter
代替map
:
JavaRDD<Model> fileRDD = sc.textFile("filePath")
.filter(line -> {
try {
String[] parts = line.split("\\|");
Long key = Long.parseLong(parts[0];
return true;
} catch (NumberFormatException nfe) {
return false;
}
});
答
String[] parts = line.split("|");
管道字符应该被转义。
String[] parts = line.split("\\|");
内地图我要做很多其他的作品,这样做地图之前,我需要进行过滤,然后使用地图启动过程的记录。 – Shankar
@Shankar,当然,你可以先“过滤”,然后是“地图”。 –