Java 如何获取满足筛选器的值的索引?
在Spark中,我可以对RDD应用一个过滤器来创建一个新的过滤器。该RDD的每个元素都满足以下过滤器:Java 如何获取满足筛选器的值的索引?,java,apache-spark,Java,Apache Spark,在Spark中,我可以对RDD应用一个过滤器来创建一个新的过滤器。该RDD的每个元素都满足以下过滤器: JavaRDD<Integer> vals = sc.parallelize(Arrays.asList(10, 15, 0, 6, 2)); JavaRDD<Integer> valsGreaterThan5 = vals.filter(new Function<Integer, Boolean>() { public Boolea
JavaRDD<Integer> vals = sc.parallelize(Arrays.asList(10, 15, 0, 6, 2));
JavaRDD<Integer> valsGreaterThan5 = vals.filter(new Function<Integer, Boolean>() {
public Boolean call(Integer x) {
if (x > 5)
return true;
else
return false;
}
});
javarddvals=sc.parallelize(Arrays.asList(10,15,0,6,2));
JavaRDD valsgreeaterthan5=vals.filter(新函数(){
公共布尔调用(整数x){
如果(x>5)
返回true;
其他的
返回false;
}
});
因此,这段代码将返回一个包含10、15和6的新RDD。然而,如果我想得到他们的索引,我应该怎么做?因此,我希望它们的索引不是10、15和6,而是0、1、3。您可以从对
创建RDD,这样您就可以按值进行筛选,然后从对映射到索引
UPD:
类似这样的东西(我附近没有Spark,因此无法确保它是否编译):
javapairdd vals=sc.parallelize(Arrays.asList(
新的Tuple2(0,10),
新元组2(1,15),
新的Tuple2(2,0),
新元组2(3,6),
新的Tuple2(4,2));
JavaRDD valsgreeaterthan5=vals.filter(新函数(){
公共布尔调用(Tuple2 x){
返回(x._2>5);
}
}).map(新函数(){
公共布尔调用(Tuple2 x){
返回x._1;
}
});
我希望你已经有了这个想法。使用lambdas还可以使代码看起来更好
UPD2:
使用lambdas时,逻辑块可能如下所示:
JavaRDD<Integer> valsGreaterThan5 = vals
.filter((x) -> x._2 > 5)
.map((x) -> x._1);
JavaRDD valsgreeaterthan5=vals
.过滤器((x)->x._2>5)
.map((x)->x._1);
可以用代码来说明一点吗?我是初学者,这对我来说现在没有多大意义:)谢谢,我有这个想法。然而,语法是错误的,我无法理解。我尝试类似的方法:javapairdd vals=sc.parallelize(Arrays.asList(10,15,0)).zipWithIndex();javapairdd valsgreeaterthan5=vals.filter((k,v)->v>5.map((k,v)->k);
JavaRDD<Integer> valsGreaterThan5 = vals
.filter((x) -> x._2 > 5)
.map((x) -> x._1);