今天在使用Java版本的Spark的flatMap()方法的时候,遇到了一个警告:Unchecked cast from List<String> to Iterator<String>。
出现场景为:
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
private static final long serialVersionUID = 1L;
@Override
public Iterator<String> call(String s) throws Exception {
String[] words = s.split(" ");
return (Iterator<String>) Arrays.asList(words);
}
});
原因是因为获取值的时候进行类型转换,不能直接由List强转为Iterator,所以解决办法如下:
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
private static final long serialVersionUID = 1L;
@Override
public Iterator<String> call(String s) throws Exception {
String[] words = s.split(" ");
List<String> list = Arrays.asList(words);
Iterator<String> it = list.iterator();
return it;
}
});
或者在方法中简写,直接一步到位:
String[] words = s.split(" ");
return (Iterator<String>) ((Arrays.asList(words)).iterator());