2017-08-04 2 views
0

Grâce à un shell Scala, j'ai accès à une base de données Elasticsearch en utilisant le connecteur elasticsearch-hadoop-5.5.0.Comment écrire un RDD de grande taille sur un disque local via le shell Scala de Scala?

je produis mon RDD en passant la commande suivante dans la coquille d'allumage:

val myRdd = sc.esRDD("myIndex/type", myESQuery) 

myRDD contient 2,1 millions de disques à travers 15 partitions. J'ai essayé d'écrire toutes les données dans un fichier texte sur mon disque local mais quand j'essaie d'exécuter des opérations qui convertissent le RDD en un tableau, comme myRdd.collect(), je surcharge mon tas java.

Existe-t-il un moyen d'exporter les données (par exemple, 100 000 enregistrements à la fois) de manière incrémentielle afin de ne jamais surcharger ma mémoire système?

Répondre

0

Lorsque vous utilisez saveAsTextFile, vous pouvez passer votre chemin de fichier comme "file:///path/to/output" pour l'enregistrer localement.

Une autre option est d'utiliser rdd.toLocalIterator qui vous permettra d'itérer sur le rdd sur le pilote. Vous pouvez ensuite écrire chaque ligne dans un fichier. Cette méthode évite de tirer tous les enregistrements en même temps.

+0

Comment utiliser dans ce casLocalIterator? –

+0

@ M.T. 'rdd.toLocalIterator.foreach (line => faire quelque chose avec la ligne)' – puhlen