当前位置: 首页 > 知识库问答 >
问题:

类型不匹配:无法从Java Spark中的迭代器转换

利思源
2023-03-14

线程“main”java.lang.error中出现异常:未解决的编译问题:类型不匹配:无法从Iterator转换为Iterable

在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());
        }

共有1个答案

谭勇
2023-03-14

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

    在Spark 2.x FlatMapFunction.call中,
  • java.util.Iterator 调用(T)
  • 在Spark 1.x FlatMapFunction.call中,
  • 可迭代的 调用(T)

您应该将Spark dependency升级到2.x并保持当前代码,或者使用FlatMapFunction与1.x分支兼容:

JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
  @Override
  public Iterable<String> call(String s) {
    return Arrays.asList(SPACE.split(s));
  }
});
 类似资料:
  • 问题内容: 我有以下几行代码 我认为第3行和第4行执行相同的任务,然后为什么编译器在第4行显示错误“类型不匹配:无法从long转换为int” 请帮忙。 问题答案: 这是因为复合赋值运算符会进行隐式转换。 从JLS复合分配运算符: 形式的复合赋值表达式等效于,其中是的类型,不同之处在于该表达式仅被评估一次。 对于二进制运算符,则必须显式进行强制转换。进行第四项作业: 它会工作。这就是您的复合赋值表达

  • 问题内容: 我正在使用ZXING库在JAVA中创建QR码生成器程序。该程序是 编译该程序时,出现类型不匹配错误, 在这条线 请帮忙!!! 问题答案: 我自己从未使用过该库,但是阅读错误消息时,我会假设您必须要以字节为单位存储字节的问题。问题将是一个字节由多个位组成,因此您不能仅通过一位表示一个字节。 将编码数据存储到ByteMatrix中,然后阅读以下内容: 使用zxing进行QR码编码和解码 完

  • 但它抱怨说: 如何同时解决这两个错误?

  • 问题内容: 线程“主”中的异常java.lang.Error:未解决的编译问题:类型不匹配:无法从Iterator转换为Iterable 在com.spark.wordcount.lession1.WordCount2.main(WordCount2.java:26) 问题答案: 您正在混合不兼容的Spark版本/代码: 在Spark 2.x中 是 在Spark 1.x中 是。 您应该将Spark

  • 我创建了一个AsyncTaskLoader: 在我的活动课上,我有这样的内容: