Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取满足筛选器的值的索引?_Java_Apache Spark - Fatal编程技术网

Java 如何获取满足筛选器的值的索引?

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

在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 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);