0
votes

Transformation et action scala

J'ai une liste RDD [(chaîne, liste [int])] comme liste (("a", liste (1,2,3,4)), ("B", liste (5,6,7 )))))

Comment les transformer en liste (("A", 1), ("A", 2), ("A", 3), ("A", 4), ("B", 5), ("B", 6), ("B", 7))

Ensuite, les actions se réduiraient par clé et génération résultat similaire à la liste (("A", 2.5) ("B", 6))

J'ai essayé à l'aide de la carte (E => Liste (E._1, E._2)) mais sa ne pas donner le résultat souhaité.

où 2,5 est moyen pour "A" et 6 est moyen pour "B"

Aide-moi avec ces ensembles de transformation et d'actions. Merci d'avance


1 commentaires

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)


3 Réponses :


1
votes

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: xxx

sortie:

Liste ((A, 1), (A, 2), (A, 3), ), (B, 1), (B, 2), (B, 3))


1 commentaires

Merci pour votre solution. C'est exactement je voulais.



1
votes

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 Flatmap code>. Ce faisant, avec une grande liste, beaucoup de données imbiberaient inutilement à une grande partie avec un ensemble de données volumineux.

Comme ils sont déjà agrégés par la clé, transformez-les avec quelque chose comme ceci: P>

(A,2.5)
(B,6.0)


1 commentaires

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.



1
votes

Vous pouvez essayer d'exploser () xxx


1 commentaires

Merci mon pote. Celui-ci est une meilleure approche aussi .. !!