从RDD <vector> spark中过滤空值

时间:2015-04-30 18:36:52

标签: java apache-spark filter rdd apache-spark-mllib

我有一个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);
    }
  }
);

2 个答案:

答案 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。但是,您可能希望使用过滤器方法获得红色的空(零)向量。这可以通过创建一个空矢量并将其过滤掉来完成。