Apache spark 如何在Spark中组合两个RDD?
我有两个JavaRDD。第一个是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<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