Wenn Sie eine RDD mit Tuples haben, die Tupel jedoch dargestellt werden, können Sie mapToPair
verwenden, um Ihre RDD von Tuple in ein PairRDD mit Schlüssel und Wert wie gewünscht umzuwandeln.
In Java 8 könnte
JavaPairRDD<Integer,List<String>> r =
rddOfTuples.mapToPair((t)->new Tuple2(
extractKey(t),
extractTuples(t)
));
Hinweis sein, dass dieser Vorgang einen Shuffle vorstellen.
Um das Offensichtliche zu sagen, sind extractKey
und extractTuples
Methoden zu implementieren, die Teile des ursprünglichen Tupels wie benötigt extrahieren.
Mit meiner begrenzten Kenntnis der Scala Tupeln, und der Eingang unter der Annahme, ist so etwas wie scala.Tuple5<String,Integer,Integer,Integer,Integer>
, könnte dies sein:
JavaPairRDD<Integer,List<String>> r =
rddOfTuples.mapToPair((t)->new Tuple2(
t._1,
Arrays.asList(t._2,t._3,t._4,t._6)
));
Wenn aber Sie wissen nicht, vorher die arity (Anzahl der Elemente) Ihrer Tuple
dann, in Scala ausgedrückt, ist es ein Product
. Um Ihre Elemente dynamisch zugreifen zu können, müssen Sie die Product
Schnittstelle verwenden, mit einer Auswahl von:
int productArity()
Object productElement(int n)
Iterator<Object> productIterator()
Dann wird es eine regelmäßige Java Übung:
JavaPairRDD<Integer,List<String>> r =
rddOfTuples.mapToPair((t)->{
List<String> l = new ArrayList<>(t.productArity()-1);
for (int i = 1; i < t.productArity(); i++) {
l.set(i-1,t.productElement(i));
}
return new Tuple2<>(t._1,l);
}));
Ich hoffe ich habe Es ist alles in Ordnung ... dieser Code oben ist ungetestet/nicht kompiliert ... Wenn Sie es mit Korrekturen arbeiten lassen, dann wenden Sie die Korrekturen in dieser Antwort an ...
Dies sieht aus wie eine 'HashMap>' oder 'LinkedHashMap >' Wenn Sie die Schlüssel 'Reihenfolge zu erhalten möchten. –
Titus
sollte ich rdd.hashMap verwenden? – hammad
Oh, ich habe missverstanden, ich dachte, Sie wollten ein RDD-Objekt in ein normales Java-Objekt konvertieren, als RDD-Objekt können Sie 'JavaPairRDD>' verwenden. –
Titus