我有 2 个 JavaRDD。第一个是

JavaRDD<CustomClass> data

第二个是
JavaRDD<Vector> features

我的自定义类有 2 个字段,(字符串)文本和(整数)标签。
我的 JavaRDD 数据中有 1000 个 CustomClass 实例,JavaRDD 功能中有 1000 个 Vector 实例。

我通过使用 JavaRDD 数据并在其上应用 map 函数计算了这 1000 个向量。

现在,我想要一个新的 JavaRDD 形式
JavaRDD<LabeledPoint>

由于 LabeledPoint 的构造函数需要一个标签和一个向量,因此我无法应用同时具有 CustomClass 和 Vector 作为参数的 map 函数作为调用函数的参数,因为它只接受一个参数。

有人可以告诉我如何组合这两个 JavaRDD 并获得新的
JavaRDD<LabeledPoint>

?

以下是我编写的代码中的一些片段:
    Class CustomClass {
        String text; int label;
    }

    JavaRDD<CustomClass> data = getDataFromFile(filename);

    final HashingTF hashingTF = new HashingTF();
    final IDF idf = new IDF();
    final JavaRDD<Vector> td2 = data.map(
            new Function<CustomClass, Vector>() {
                @Override
                public Vector call(CustomClass cd) throws Exception {
                    Vector v = new DenseVector(hashingTF.transform(Arrays.asList(cd.getText().split(" "))).toArray());
                    return v;
                }
            }
    );

    final JavaRDD<Vector> features = idf.fit(td2).transform(td2);

最佳答案

您可以使用 JavaRDD#zip :


JavaPairRDD<CustomClass,Vector> dataAndFeatures = data.zip(features);
// TODO dataAndFeatures.map to LabeledPoint instances

文档的突出显示部分成立,因为您通过 td2 的简单 map 创建 data 。然后 df (== features ?) 是 transform on IDFModel instance 的结果,这也使值保持对齐。

关于apache-spark - 如何在 Spark 中组合两个 RDD?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39507972/

10-09 15:55