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; 
       } 
      }); 
+0

内地图我要做很多其他的作品,这样做地图之前,我需要进行过滤,然后使用地图启动过程的记录。 – Shankar

+1

@Shankar,当然,你可以先“过滤”,然后是“地图”。 –

String[] parts = line.split("|");

管道字符应该被转义。

String[] parts = line.split("\\|");

参见:https://*.com/a/9808719/3662739

+0

其实我已经逃过了管道人物......对此感谢。 – Shankar

+0

哦,nvm然后xD,我认为这会使数组中断,这就是为什么你不能跳过。 – zeroTAG

+3

虽然这是对问题的合理评论,但它是*评论*,而不是答案。请避免发表评论作为答案。当你获得50的声望时,你也可以发表评论。 –