簡體   English   中英

大清單FlatMap Java Spark

[英]Large list FlatMap Java Spark

我在JavaPairRDD<Integer, List<String>>有一個很大的列表,我想做一個flatMap來獲取列表條目的所有可能組合,這樣我最終得到JavaPairRDD<Integer, Tuple2<String,String>> 基本上如果我有類似的東西

(1, ["A", "B", "C"])

我想得到:

(1, <"A","B">) (1, <"A", "C">) (1, <"B", "C")

問題在於大型列表,因為我所做的是通過在輸入列表上嵌套循環來創建大型Tuple2對象列表。 有時這個列表不適合內存。 我發現了這一點,但不確定如何在Java中實現它: Spark FlatMap函數用於巨大的列表

您可能希望對列表進行flatMap ,然后在過濾相等值之前將RDD到自身:

JavaPairRDD<Integer, List<String>> original = // ...
JavaPairRDD<Integer, String> flattened = original.flatMapValues(identity());
JavaPairRDD<Integer, Tuple2<String, String>> joined = flattened.join(flattened);
JavaPairRDD<Integer, Tuple2<String, String>> filtered = 
    joined.filter(new Function<Tuple2<Integer, Tuple2<String, String>>, Boolean> () {
        @Override
        public Boolean call(Tuple2<Integer, Tuple2<String, String>> kv) throws Exception {
            return kv._2()._1().equals(kv._2()._2());
        }
    });

取決於你的數據集有多大,在我的工作中它通常需要處理100-200GB數據集使用FlatMap和flatMapToPair兩者都適用於高密集計算。 以下示例

JavaPairRDD<Integer, List<String>>= DatasetsRDD.
    .flatMapToPair(x->{
    return xx;
    });

此外,如果您的數據集很大,您可以嘗試使用spark persistance to disk

Storage Level   

    MEMORY_ONLY
    MEMORY_ONLY_SER 
    MEMORY_AND_DISK_SER 
    DISK_ONLY
    MEMORY_ONLY_2

References: https://spark.apache.org/docs/latest/rdd-programming-guide.html

暫無
暫無

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

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