线程中的异常" main" java.lang.Error:未解决的编译问题: 类型不匹配:无法从Iterator转换为Iterable
at com.spark.wordcount.lession1.WordCount2.main(WordCount2.java:26)
SparkConf conf = new SparkConf().setAppName("cust data").setMaster("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> lines = sc.textFile("C:\\\\Users\\\\dell\\\\Desktop\\\\simple_text_file.txt");
JavaRDD<String> words = lines.flatMap(s -> Arrays.asList(SPACE.split(s)).iterator());
JavaPairRDD<String, Integer> ones = words.mapToPair(s -> new Tuple2<>(s, 1));
JavaPairRDD<String, Integer> counts = ones.reduceByKey((i1, i2) -> i1 + i2);
List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2<?,?> tuple : output) {
System.out.println(tuple._1() + ": " + tuple._2());
}
答案 0 :(得分:1)
您正在混合不兼容的Spark /代码版本:
FlatMapFunction.call
is java.util.Iterator<R> call(T t)
FlatMapFunction.call
is Iterable<R> call(T t)
。您应该将Spark依赖项升级到2.x并保留当前代码或使用FlatMapFunction
compatible with 1.x branch:
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String s) {
return Arrays.asList(SPACE.split(s));
}
});
答案 1 :(得分:0)
问题应该已经在您的(Eclipse?)IDE中通过红色线条和显示,在您实际执行程序之前,您的源包含错误的警告。 Eclipse很好地让你无论如何都可以运行,包括如果你遇到有问题的代码就会抛出“未解决的编译问题”的代码。
异常表示在调用方法期望Iterator<>
时传递Iteratable<>
,这是一个实现该接口的对象,并且方法iterator()
返回{ {1}}。