ich bin neu zu funken, ich möchte ein JavaPairRDD erstellen, um in der Lage zu sein, es zu sortieren und zwischen Schlüsseln zu vergleichen, wie es das Beispiel des Codes unten zeigt, habe ich versucht, ein zu erstellen JavaPairRDD, aber nach der Verwendung der Funktion sortByKey(), habe ich festgestellt, dass es Schlüssel als Strings nicht als Ganzzahlen behandelt.wie man ein Paar rdd mit einem Int-Schlüssel
JavaRDD<String> csvFileC = sc.textFile(currentFile);
JavaPairRDD<Integer, String> pairsC = csvFileC.mapToPair(new keyData()).sortByKey(true).cache();
zum Beispiel, wenn pairsC folgende Elemente enthält:
(1, as), (2, du), (12, ER), (3, Cu), (22, hh
)
so, nachdem es sortByKey() und Anzeige wieder mit finde ich es mag:
(1, as), (12, r), (2, Sie), (22, hh), (3, cu)
was bedeutet, es Tasten als Strings nicht als ganze Zahlen behandelt, aber das Ergebnis, das ich sehen ist wie folgt:
(1, as), (2, Sie), (3, cu) , (12, er), (22, hh)
also wie kann ich mit meinen Schlüsseln als int umgehen? , um weitere Informationen, ist dies die Funktion keyData, die ich verwende, um die RDD zu einer Arbeit PairRDD
public static class keyData implements PairFunction <String, Integer, String>
{
public Tuple2<Integer, String> call(String x) {
String[] strs = x.split(",");
return new Tuple2(strs[0], x.replaceFirst(strs[0]+",", ""));
}
ist es nicht möglich, Aufruf ändern, damit es ein Tuple2 zurückgibt? Wenn ja, wie? weil ich Keys als Ganzzahlen brauche –
hammadspark
Ja ist es, ich erweiterte meine Antwort ein wenig. –
und vielleicht ist es unlogisch, aber yup mein Code funktioniert normal – hammadspark