我有一个JavaRDD形式的双打数据集。我想删除包含空值的行(向量)。我打算使用过滤功能来做到这一点,但无法弄清楚如何做到这一点。我很新兴spark和mllib,如果你能帮助我,我会非常感激。这就是我的解析数据的样子:
String path = "data.txt";
JavaRDD<String> data = sc.textFile(path);
JavaRDD<Vector> parsedData = data.map(
new Function<String, Vector>() {
public Vector call(String s) {
String[] sarray = s.split(" ");
double[] values = new double[sarray.length];
for (int i = 0; i < sarray.length; i++)
values[i] = Double.parseDouble(sarray[i]);
return Vectors.dense(values);
}
}
);
答案 0 :(得分:0)
检查vector [i]元素是否为null可能会让你明白?
然后执行类似于vector.remove(n)的操作。在哪里&#34; n&#34;是要从向量中删除的元素。
答案 1 :(得分:0)
Vector values = Vectors.dense(new double[vector_length]);
parsedData = parsedData.filter((Vector s) -> {
return !s.equals(Vectors.dense(new double[vector_length]));
});
如评论中所述,RDD向量不能为NULL。但是,您可能希望使用过滤器方法获得红色的空(零)向量。这可以通过创建一个空矢量并将其过滤掉来完成。