2017-04-17 29 views
0

與此代碼的.filter()的一部分,Lambda表達式與Java和Spark

JavaPairRDD<Integer, ?> vals = sc 
      .parallelize(Arrays.asList(10, 15, 0)) 
      .zipWithIndex(); 
JavaPairRDD<Integer, ?> valsGreaterThan5 = vals 
      .filter((k, v) -> v > 5) 
      .map((k, v) -> k); 

給了我一個

Lambda表達式的簽名功能接口方法調用的簽名不匹配(Tuple2)

錯誤。我不明白。我甚至沒有在我的類型中使用Tuple2。錯誤的原因是什麼,我該如何解決?

回答

0

mapfilter只能獲得一個類型爲Tuple2的參數。它不能通過這種方式進行重組。您可以:

JavaPairRDD<Integer, ?> valsGreaterThan5 = vals 
     .filter(kv -> v._2 > 5) 
     .map(kv -> k._1); 

或更好:

JavaPairRDD<Integer, ?> valsGreaterThan5 = vals 
     .filter(kv -> v._2 > 5) 
     .keys(); 
+1

你確定,這個語法是正確的? – SpiderRico