提问者:小点点

将JavaPairRDD转换为JavaRDD


我正在使用ElasticSearch-Hadoop库从ElticSearch获取数据。

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传递给随机森林算法,但它在编译时给出了强制转换异常。

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

添加了方括号,因为小于和大于符号不起作用

有人能给我建议正确的铸造方法吗?我是Spark Datastrucutres的新手。


共1个答案

匿名用户

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

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

为此,只需运行如下内容:

JavaRDD newRDD=esRDD.map(x=

或等效于创建一个没有第一列的新JavaRDD。