Spark Java错误:-source 1.5中不支持lambda表达式

时间:2016-11-16 15:47:29

标签: java apache-spark

http://spark.apache.org获得以下代码。我收到了以下错误....

代码:

JavaRDD<String> lines = sc.textFile(logFile);
JavaPairRDD<String, Integer> pairs = lines.mapToPair(s -> new Tuple2(s, 1));

错误:

-source 1.5中不支持lambda表达式(使用-source 8或更高版本来启用lambda表达式)

但是下面的代码完全正常。能帮我找到原因吗?

新代码:

JavaRDD<String> lines = sc.textFile(logFile);
JavaPairRDD<String, String> prodPairs = lines.mapToPair(new PairFunction<String, String, String>() {
            public Tuple2<String, String> call(String s) {
                String[] prodSplit = s.split(",");
                return new Tuple2<String, String>(prodSplit[2], prodSplit[0]+","+prodSplit[1]+","+prodSplit[2]); 
            }
        });

3 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的Java? Lambda expressions(->)中引入了Java 8,如果您使用的Java少于8,那么它将不起作用。

如果您已经拥有Java 8,则可以通过转到项目构建路径和select the correct compiler version and jdk version来更改Eclipse IDE中的Java版本和编译器详细信息。

如果从命令行运行maven,则可以先设置Java home,然后运行build。

例如:

set JAVA_HOME=<JDK Location>

然后

mvn clean install

答案 1 :(得分:0)

您可能需要阅读Lambda Expression docs。这是在JDK 1.8中添加的。第一段代码中的箭头操作符用法是Lambda Expression。您似乎正在使用Java 1.5编译代码。因此,您正确地得到了错误。在第二段代码中,您已将Lambda表达式替换为传统代码。因此编译器停止了抱怨。除非您有充分的理由,否则您可能希望将编译器升级到1.8。您错过了JDK后续版本中添加的许多优秀功能。

答案 2 :(得分:0)

你在使用maven吗?

默认情况下,maven使用源代码和目标编译到java 1.5:

  

另请注意,目前默认的源设置为1.5和   默认目标设置为1.5,与您运行Maven的JDK无关   用。如果要更改这些默认值,则应设置source和   如设置Java的-source和-target中所述的目标   编译器。 Source

您需要在pom build编译器插件中配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
<build>