2016-06-22 1 views
1

Par exemple, j'ai une Scala RDD avec 10000 éléments, je veux prendre chaque élément un par un pour traiter. Comment je fais ça? J'ai essayé d'utiliser take(i).drop(i-1), mais cela prend énormément de temps.Comment parcourir efficacement un RDD

+0

Pourquoi n'utilisez-vous pas simplement 'map' sur votre' RDD' ou 'foreach'? – meucaa

+0

J'utilise scala. Pour exeampe, mon type rdd est org.apache.spark.rdd.RDD [(String, Iterable [(Chaîne, Chaîne, Chaîne, Chaîne)])], je veux juste obtenir chaque élément puis faire un autre traitement. –

+0

Vous voulez parcourir sur 'Tuple (String, Iterable [(Chaîne, Chaîne, Chaîne, Chaîne)])' ou sur votre 'Iterable'? – meucaa

Répondre

1

D'après ce que vous avez dit dans les commentaires:

yourRDD.map(tuple => tuple._2.map(elem => doSomething(elem))) 

Le premier map itérera sur les tuples à l'intérieur de votre RDD, c'est pourquoi j'ai appelé la tuple variable, pour chaque tuple nous obtenons la deuxième élément ._2 et appliquer un map qui parcourent tous les éléments de votre Iterable c'est pourquoi j'ai appelé la variable elem. doSomething() est juste une fonction aléatoire de votre choix à appliquer sur chaque élément.