2017-04-17 49 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