2016-11-16 58 views
1

接到http://spark.apache.org支持下面的代碼。我收到以下錯誤....星火Java錯誤:lambda表達式沒有在-source 1.5

代碼:

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

錯誤:

lambda表達式中不-source 1.5支持(使用-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

Lambda表達式在Java 8中引入... –

+0

@Vijay K:你使用的是什麼版本的Java? Lambda在Java 8中引入,如果您已經擁有Java 8,則可以通過轉到項目構建路徑來更改Eclipse IDE中的Java版本和編譯器詳細信息。 – Shankar

+0

你在使用maven嗎? –

回答

0

什麼版本的Java您正在使用? Lambda expressions(->)被引入Java 8,如果你使用Java小於8,那麼它不會工作。

如果你已經擁有的Java 8中,您可以通過將項目構建路徑和select the correct compiler version and jdk version改變Java版本和編譯器的詳細信息在Eclipse IDE中。

如果您從命令行運行Maven的時候,你可以先設置Java主,然後運行該版本。

例如:

set JAVA_HOME=<JDK Location> 

然後

mvn clean install 
+0

謝謝Shankar。新來java。java --version顯示:java版本「1.8.0_111」。不知道爲什麼maven正在採取舊版本。有什麼設置我需要改變? –

+0

@VijayK:更新了我的答案。 – Shankar

0

您可能需要閱讀Lambda Expression docs。這是在JDK 1.8中添加的。第一部分代碼中的箭頭運算符用法是Lambda表達式。看來你正在用Java 1.5編譯你​​的代碼。因此你正確地得到錯誤。在第二段代碼中,您已將傳統代碼替換爲Lambda表達式。因此,編譯器停止抱怨。除非你有充分的理由,否則你可能想將你的編譯器升級到1.8。您錯過了在後續版本的JDK中添加的許多優秀功能。

0

你使用Maven?

通過默認的Maven使用的源和目標編譯成Java 1.5:

還要注意的是,目前默認源設置爲1.5, 默認目標設定爲1.5,獨立的JDK你運行Maven 用。如果你想改變這些默認值,你應該在設置Java編譯器 的-source和-target描述設置源和目標 。 Source

您需要在POM構建編譯器插件配置:

<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>