类型不匹配:无法从Java Spark中的Iterator <string>转换

时间:2018-04-14 18:07:57

标签: java apache-spark

  

线程中的异常&#34; main&#34; 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());
        }

2 个答案:

答案 0 :(得分:1)

您正在混合不兼容的Spark /代码版本:

您应该将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}}。