2016-07-25 8 views
1

Ich habe eine große Liste in JavaPairRDD<Integer, List<String>> und ich möchte eine FlatMap tun, um alle möglichen Kombinationen von Listeneinträgen zu bekommen, so dass ich am Ende mit JavaPairRDD<Integer, Tuple2<String,String>>. Im Grunde genommen, wenn ich etwas habe, wieGroße Liste FlatMap Java Spark

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

Ich mag bekommen:

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

Das Problem ist, mit großen Listen wie das, was ich getan habe, ist eine große Liste von Tuple2 Objekten erstellt, indem eine verschachtelte Schleife über die Eingabeliste. Manchmal passt diese Liste nicht in den Speicher. Ich fand dieses, aber nicht sicher, wie es in Java implementieren: Spark FlatMap function for huge lists

Antwort

2

Möglicherweise möchten Sie die Liste flatMap und dann die RDD auf sich selbst kommen vor der Filterung gleiche Werte:

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()); 
     } 
    }); 
+0

Dank nutzen könnten versuchen, die Arbeiten sollten, ich habe es verpasst. – ilijaluve

1

hängt davon ab, wie groß von Ihren Datensätzen, in meinem Job muss es in der Regel 100-200GB Datensätze verarbeiten, die FlatMap und FlatMapToPair beide verwendet werden, ist richtig für hochintensive Berechnungen. Beispiel unten

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

Auch wenn Ihre Datensätze sehr groß sind Sie Funken persistance auf die Festplatte

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