J'ai une liste RDD [(chaîne, liste [int])] comme liste (("a", liste (1,2,3,4)), ("B", liste (5,6,7 ))))) p>
Comment les transformer en liste (("A", 1), ("A", 2), ("A", 3), ("A", 4), ("B", 5), ("B", 6), ("B", 7)) P>
Ensuite, les actions se réduiraient par clé et génération résultat similaire à la liste (("A", 2.5) ("B", 6)) P>
J'ai essayé à l'aide de la carte (E => Liste (E._1, E._2)) mais sa ne pas donner le résultat souhaité. P>
où 2,5 est moyen pour "A" et 6 est moyen pour "B" P>
Aide-moi avec ces ensembles de transformation et d'actions. Merci d'avance p>
3 Réponses :
Il y a plusieurs façons d'obtenir ce que vous voulez. Vous pouvez utiliser un pour la compréhension également, mais le tout premier est venu à mon esprit est cette implémentation: sortie: p> Liste ((A, 1), (A, 2), (A, 3), ), (B, 1), (B, 2), (B, 3)) CODE> P> P>
Merci pour votre solution. C'est exactement je voulais.
Si ce que vous voulez, c'est la moyenne de chaque liste à la fin, il n'est pas nécessaire de les casser dans des éléments individuels avec un Comme ils sont déjà agrégés par la clé, transformez-les avec quelque chose comme ceci: P> Flatmap code>. Ce faisant, avec une grande liste, beaucoup de données imbiberaient inutilement à une grande partie avec un ensemble de données volumineux.
(A,2.5)
(B,6.0)
Merci Travis, ça a fonctionné aussi bien. En fait aujourd'hui, j'ai confronté à une interview d'entretien où ils m'ont demandé cela en deux parties séparées. Un à plat et un autre à agréger mais je n'ai pas pu atteindre la première partie de celui-ci et la prochaine partie que j'ai pu faire, c'est pourquoi je l'ai posée de cette façon.
Vous pouvez essayer d'exploser ()
Merci mon pote. Celui-ci est une meilleure approche aussi .. !!
La partie ultérieure que j'ai énoncé son comme ci-dessous: - Val rdd_toreduce = spark.sparkcontext.parallexize (liste ((((("A", 1.0), ("A", 2.0), ("A", 3.0), ( "A", 4.0), ("B", 5.0), ("B", 6.0), ("B", 7.0))) .MapValues (valeur => (valeur, 1) .Reducebykey {cas ((Suml, comtel), (sumr, pays)) => (Suml + Sumr, comteL + Pays)} .Mapvalues {cas (somme, compte) => somme / compte} .Collect rdd_toreduc.foreach (println)