【问题标题】:Cannot resolve method 'flatMap(<lambdaexpression>)' error无法解决方法 'flatMap(<lambdaexpression>)' 错误
【发布时间】:2017-06-16 10:57:49
【问题描述】:

我是 apache spark 的新手,正在尝试运行 wordcount example 。但是 intellij 编辑器在第 47 行给出了错误无法解析方法“flatMap()”错误

编辑: 这是我得到错误的那一行

JavaRDD<String> words = lines.flatMap(s -> Arrays.asList(SPACE.split(s)).iterator());

【问题讨论】:

  • 您的项目使用的是什么版本的JDK?什么语言水平?
  • jdk 1.8版
  • 忽略 IntelliJ 的消息,当您尝试构建时,您从编译器得到的消息是什么?
  • 错误:(47, 38) java: cannot access scala.ScalaObject class file for scala.ScalaObject not found
  • 你的类路径/依赖项中有所有必要的库吗?

标签: java apache-spark intellij-idea


【解决方案1】:

您使用的似乎是旧版本的 Spark,它需要来自 flatMap() 函数的 Iterable 而不是 Iterator。试试这个:

JavaRDD<String> words = lines.flatMap(s -> Arrays.asList(SPACE.split(s)));

另见Spark 2.0.0 Arrays.asList not working - incompatible types

【讨论】:

    【解决方案2】:

    Stream#flatMap 用于将多个流合并为一个,因此您提供的供应商方法必须返回一个 Stream 结果。

    你可以这样试试:

    lines.stream().flatMap(line -> Stream.of(SPACE.split(line))) .map(word -> // map to JavaRDD)

    【讨论】:

      【解决方案3】:

      flatMap 方法采用未使用 @FunctionalInterface 注释的 FlatMapFunctionas 参数。所以确实不能将它用作 lambda。

      只需构建一个真正的FlatMapFunctionobject 作为参数,您就可以确定了。

      【讨论】:

      • 功能接口不需要注解。
      【解决方案4】:

      flatMap() 是 Java 8 流 API。我认为您应该检查 IDEA compile java 版本。

      编译java版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-09
        • 2018-01-05
        • 2012-01-04
        • 1970-01-01
        • 2014-11-14
        • 1970-01-01
        • 2018-06-05
        相关资源
        最近更新 更多