一尘不染

将JavaPairRDD转换为JavaRDD

elasticsearch

我正在使用ElasticSearch-Hadoop库从ElsticSearch提取数据。

JavaPairRDD<String, Map<String, Object>> esRDD = JavaEsSpark.esRDD(sc);

现在我有了JavaPairRDD。我想在此RDD上使用来自MLLib的随机森林。所以我将其转换为JavaPairRDD.toRDD(esRDD)这将给我RDD。使用RDD,我再次转换为JavaRDD

JavaRDD<LabeledPoint>[] splits = (JavaRDD.fromRDD(JavaPairRDD.toRDD(esRDD),
            esRDD.classTag())).randomSplit(new double[] { 0.5, 0.5 });

JavaRDD<LabeledPoint> trainingData = splits[0];
JavaRDD<LabeledPoint> testData = splits[1];

我想将trainingData和TestData传递给Random Forest算法,但是它在编译时给出了强制转换异常。

类型不匹配:无法从JavaRDD [Tuple2 [String,Map [String,Object]]] []转换为JavaRDD
[LabeledPoint] []

添加小于和大于符号的方括号不起作用

有人可以建议我进行铸造的正确方法吗?我是Spark Datastrucutres的新手。


阅读 933

收藏
2020-06-22

共1个答案

一尘不染

您在JavaPairRDD列中拥有哪些数据?与常规的RDD不同,JavaPairRDD是第一列和第二列之间的键/值映射。

您可能希望从JavaPairRDD删除第一列,仅返回带有值列的JavaRDD。

为此,只需运行以下命令:

JavaRDD newRDD = esRDD.map(x => x._2);

或等效方法以创建不带第一列的新JavaRDD。

2020-06-22