我有 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/