【问题标题】:filtering null values from an RDD<Vector> spark从 RDD<Vector> 火花过滤空值
【发布时间】:2015-07-10 14:24:24
【问题描述】:

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

【问题讨论】:

  • 向量中没有NULL。如果 double 有一些 NULL,Double.parseDouble 将抛出异常。只能有空向量。

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


【解决方案1】:

检查 vector[i] 元素是否为 null 可能会让你明白吗?

然后执行类似于vector.remove(n)的操作。其中“n”是要从向量中删除的元素。

【讨论】:

【解决方案2】:
Vector values = Vectors.dense(new double[vector_length]);
    parsedData = parsedData.filter((Vector s) -> {
         return !s.equals(Vectors.dense(new double[vector_length]));
    });

如 cmets 中所述,RDD 向量不能为 NULL。但是,您可能希望使用过滤器方法获得红色的空(零)向量。这可以通过创建一个空向量并将其过滤掉来完成。

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 2018-03-07
    • 2014-08-30
    • 2018-09-18
    • 2017-02-05
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多