J'ai quelques problèmes avec une opération foreach
: le programme ne se termine jamais et c'est comme si il était dans l'impasse sur cette ligne.Foreach Deadlock dans Scala
C'est la ligne de code du programme est bloqué sur, où j'ai d'imprimer le premier élément du rddData
pour chaque élément de rddUserData
:
rddUserData.foreach(r => println(trasformToIndexed().lookup(0)(0)._2.toDouble))
Voici le code de la fonction trasformToIndex
:
def trasformToIndexed(): RDD[(Long, ((String, String), Int))] = {
val withIndex = rddData.zipWithIndex()
val indexKey = withIndex.map{case (k,v) => (v,k)}
indexKey
}
J'ai aussi essayé de cette façon, en utilisant withouth zipWithIndex
, mais tournant le RDD dans une liste, puis obtenir le premier élément, mais il ne fonctionne pas non plus:
rddUserData.foreach(r => println(rddData.collect().toList(0)._2).toDouble)
La seule façon d'atteindre mon but est de parcourir la rddUserData
par un for statement
, et faire les mêmes opérations.
val listReaction = rddUserData.collect().toList
for(i<-0 to listReaction.size-1){
println(println(rddData.collect().toList(0)._2).toDouble)
}
Cependant, je voudrais le résoudre avec une déclaration foreach
.
J'ai du mal à voir comment le premier bloc de code est équivalent au dernier bloc. – erip
Salut, merci d'avoir répondu. Quoi qu'il en soit, bien sûr, ils sont différents pour la façon dont je récupère le premier élément du rdd, mais en fait le dernier bloc de code ne va pas dans l'impasse, tandis que le premier le fait. Le dernier bloc de code celui ci-dessus utilise de la même façon pour prendre le premier élément de la rddData. – xcsob
Qu'est-ce que ''rddData'? Pourquoi appelez-vous 'collect' à chaque itération? Pourquoi appelez-vous TOUT (semble que vous avez juste besoin de 'rddData.first'). Vous ne semblez pas avoir besoin d'un 'foreach' non plus, car le corps ne dépend pas de l'entrée ... – Dima