apachespark:javapairdd Cogroup函数为wrappers提供$iterable,如何遍历它?

apachespark:javapairdd Cogroup函数为wrappers提供$iterable,如何遍历它?,java,apache-spark,Java,Apache Spark,我使用的是ApacheSpark1.1.0。在实现过程中,我在javapairdd上调用cogroup javapairdd返回的结果是格式的 有人知道如何在Java中迭代wrappers$iterable?我曾尝试将其强制转换为Iterable或JavaIterableRapPerserializer,但它们都抛出了ClassCastException 代码是: javapairdd mtpairdd的结果类型为Tuple2 JavaPairRDD mcPairRDD的结果类型为Tuple2

我使用的是ApacheSpark1.1.0。在实现过程中,我在
javapairdd
上调用cogroup

javapairdd返回的结果是
格式的

有人知道如何在Java中迭代
wrappers$iterable
?我曾尝试将其强制转换为Iterable或JavaIterableRapPerserializer,但它们都抛出了ClassCastException

代码是:

javapairdd mtpairdd的结果类型为
Tuple2

JavaPairRDD mcPairRDD的结果类型为
Tuple2

但所有类型强制转换选项都抛出异常

谢谢,
Nitin

如果不使用原始类型
JavaPairdd
列表
,编译器可以帮助您找到真正的问题。您将对象转换为错误的类型。以下是我对您的代码的修复:

    JavaPairRDD<String, Tuple2<String, ClassMTObj>> mcPairRDD = null;
    JavaPairRDD<String, Tuple2<String, ClassMCObj>> mtPairRDD = null;

    JavaPairRDD<String, Tuple2<Iterable<Tuple2<String, ClassMTObj>>, Iterable<Tuple2<String, ClassMCObj>>>> mCmTPairRDD
            = mcPairRDD.cogroup(mtPairRDD, 100);
    List<Tuple2<String, Tuple2<Iterable<Tuple2<String, ClassMTObj>>, Iterable<Tuple2<String, ClassMCObj>>>>> lst = mCmTPairRDD.collect();
    for (Tuple2<String, Tuple2<Iterable<Tuple2<String, ClassMTObj>>, Iterable<Tuple2<String, ClassMCObj>>>> kv : lst) {
        String key = kv._1();
        Iterable<Tuple2<String, ClassMTObj>> v1 = kv._2()._1();
        Iterable<Tuple2<String, ClassMCObj>> v2 = kv._2()._2();
        for (Tuple2<String, ClassMTObj> kv1 : v1) {
            //...
        }
        for (Tuple2<String, ClassMCObj> kv2 : v2) {
            //...
        }
    }
JavaPairRDD-mcPairRDD=null;
javapairdd mtpairdd=null;
javapairdd mcmtpairdd
=mcpairdd.cogroup(mtpairdd,100);
List lst=mCmTPairRDD.collect();
用于(Tuple2 kv:lst){
串键=千伏。_1();
Iterable v1=kv._2()._1();
Iterable v2=kv._2()._2();
用于(Tuple2 kv1:v1){
//...
}
用于(Tuple2 kv2:v2){
//...
}
}

此处似乎缺少一些内容:“JavaPairdd返回的结果格式为。”请尝试单击帖子下方的“编辑”链接,并将该部分放在后面的勾号中。@Paul:我已经完成了编辑。
Iterable mcBean = (Iterable) obj2._1()
JavaIterableWrapperSerializer mcBean = (JavaIterableWrapperSerializer) obj2._1();
    JavaPairRDD<String, Tuple2<String, ClassMTObj>> mcPairRDD = null;
    JavaPairRDD<String, Tuple2<String, ClassMCObj>> mtPairRDD = null;

    JavaPairRDD<String, Tuple2<Iterable<Tuple2<String, ClassMTObj>>, Iterable<Tuple2<String, ClassMCObj>>>> mCmTPairRDD
            = mcPairRDD.cogroup(mtPairRDD, 100);
    List<Tuple2<String, Tuple2<Iterable<Tuple2<String, ClassMTObj>>, Iterable<Tuple2<String, ClassMCObj>>>>> lst = mCmTPairRDD.collect();
    for (Tuple2<String, Tuple2<Iterable<Tuple2<String, ClassMTObj>>, Iterable<Tuple2<String, ClassMCObj>>>> kv : lst) {
        String key = kv._1();
        Iterable<Tuple2<String, ClassMTObj>> v1 = kv._2()._1();
        Iterable<Tuple2<String, ClassMCObj>> v2 = kv._2()._2();
        for (Tuple2<String, ClassMTObj> kv1 : v1) {
            //...
        }
        for (Tuple2<String, ClassMCObj> kv2 : v2) {
            //...
        }
    }