簡體   English   中英

Apache spark:JavaPairRDD Cogroup函數賦予wrappers $ iterable,如何遍歷它?

[英]Apache spark : JavaPairRDD Cogroup function gives wrappers$iterable, how to traverse it?

我正在使用Apache Spark 1.1.0。 在實現期間,我在JavaPairRDD<String, SomeClassObjects>上調用JavaPairRDD<String, SomeClassObjects>

JavaPairRDD返回的結果采用<String, wrappers$iterable>

有誰知道如何在Java中迭代wrappers$iterable 我嘗試將其強制轉換為Iterable或JavaIterableWrapperSerializer,但它們都拋出ClassCastException。

代碼是:

JavaPairRDD mtPairRDD的結果類型為Tuple2<String, ClassMTObj>

JavaPairRDD mcPairRDD的結果類型為Tuple2<String,ClassMCObj>

JavaPairRDD mCmTPairRDD = mcPairRDD.cogroup(mtPairRDD, 100);
List        lst         = mCmTPairRDD.collect()

        for(int i=0;i <= lst2.size(); i++) {
            Tuple2    obj1    = (Tuple2) lst2.get(i);
            String    mCompId = (String) obj1._1();

            Tuple2     obj2   = (Tuple2) obj1._2();
            ClassMCObj mcBean = (ClassMCObj) obj2._1(); //ClassCastException:due to wrappers$iterable               
            ClassMTObj mcT    = (ClassMTObj) obj2._2(); //ClassCastException:due to wrappers$iterable
        }

我已經嘗試過鑄造

Iterable mcBean = (Iterable) obj2._1()

要么

JavaIterableWrapperSerializer mcBean = (JavaIterableWrapperSerializer) obj2._1();

但是所有類型轉換選項都將引發Exception。

謝謝你,尼丁

如果您不使用原始類型JavaPairRDDList ,則編譯器可以幫助您找到真正的問題。 您正在將對象轉換為錯誤的類型。 這是我對您代碼的修正:

    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) {
            //...
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM