Apache spark 如何在Spark中组合两个RDD?

Apache spark 如何在Spark中组合两个RDD?,apache-spark,rdd,apache-spark-mllib,Apache Spark,Rdd,Apache Spark Mllib,我有两个JavaRDD。第一个是 JavaRDD<CustomClass> data JavaRDD数据 第二个是 JavaRDD<Vector> features JavaRDD特性 我的自定义类有两个字段,(String)text和(int)label。 我在JavaRDD数据中有1000个CustomClass实例,在JavaRDD特性中有1000个Vector实例 通过使用JavaRDD数据并在其上应用map函数,我计算了这1000个向量 现在,我想要一个

我有两个JavaRDD。第一个是

JavaRDD<CustomClass> data
JavaRDD数据
第二个是

JavaRDD<Vector> features
JavaRDD特性
我的自定义类有两个字段,(String)text和(int)label。 我在JavaRDD数据中有1000个CustomClass实例,在JavaRDD特性中有1000个Vector实例

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

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

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

有人能告诉我如何结合这两个JavaRDD并获得新的

JavaRDD<LabeledPoint> 
JavaRDD
?

以下是我编写的代码的一些片段:

    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);
Class自定义类{
字符串文本;int标签;
}
JavaRDD data=getDataFromFile(文件名);
final HashingTF HashingTF=新HashingTF();
最终IDF IDF=新IDF();
最终JavaRDD td2=data.map(
新函数(){
@凌驾
公共向量调用(CustomClass cd)引发异常{
Vector v=newdensevector(hashingTF.transform(Arrays.asList(cd.getText().split(“”)).toArray());
返回v;
}
}
);
最终的JavaRDD特性=idf.fit(td2.transform)(td2);
您可以使用:

用另一个RDD压缩此RDD,并用返回键值对 每个RDD中的第一个元素,每个RDD中的第二个元素,等等 两个RDD具有相同数量的分区和相同的 每个分区中的元素数(例如,一个元素是通过地图生成的 另一方面)

javapairdd dataAndFeatures=data.zip(features);
//TODO dataAndFeatures.map到LabeledPoint实例
文档突出显示的部分保持不变,因为您可以通过
数据的简单
映射
创建
td2
。然后,
df
(==
功能
?)是结果,这也保持了值对齐

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