从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]);
}
});
答案 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>