2015-04-13 1 views
1

j'ai « fichiers téléchargés » N à partir d'un certain répertoire dans un seul RDDSpark: Tri RDD à partir de plusieurs fichiers sans utiliser de recueillir

val data = sc.textFile("file:///myPath/*.txt") 

Par exemple mes 2 fichiers contiennent 5 lignes chacune.

Fichier 1

A 
B 
C 
D 
E 

Fichier 2

F 
G 
H 
I 
J 

Si j'ajoute un sortBy à mon code:

val sortedData = data.sortBy(x => x) 

Je ne reçois pas mes données triées, mais juste un hasard RDD:

J 
B 
C 
E 
A 
D 
G 
F 
H 
I 

Collect pourrait me aider, mais

1) ce n'est pas idéal pour les grands RDD

2) au lieu d'un RDD, elle retourne un tableau (que je devrais re-paralléliser)

Merci à avancer

FF

+0

Cela devrait fonctionner comme ça. Comment vérifiez-vous les résultats de la sorte? – maasg

+0

"Impression" mon résultat ... sortedData.foreach (println) –

+0

sortedData.foreach (println) n'imprimera rien! – eliasah

Répondre

1

vous pouvez utiliser la méthode de l'union si vous avez plusieurs RDD:

val rdd = rdd1.union(rdd2) 

Cela va agréger les deux rdds et ensuite vous pouvez trier sur ce nouveau rdd.

Mais dans votre cas, vous pouvez lire toutes les données dans le même rdd et ensuite trier.

EDIT:

J'ai créé 2 fichiers contenant fichier1 et fichier2 et je l'ai fait ce qui suit:

enter image description here

+0

Merci Eliasah. Et si j'avais N fichiers? Puis-je utiliser une seule commande pour "les associer tous en même temps"? –

+0

J'ai également trouvé ce code "sc.textFile (','. Join (files))", mais je ne peux pas obtenir sa syntaxe –

+0

Si vous avez N fichiers. Vous pouvez utiliser un caractère générique par exemple dans la méthode sc.textFile pour les lire tous dans un RDD. – eliasah