Spark - Comment compter le nombre d'enregistrements par clé
C'est probablement un problème facile, mais, fondamentalement, j'ai un dataset où je suis pour compter le nombre de femelles pour chaque pays. En fin de compte je veux de groupe de chaque décompte par le pays, mais je ne suis pas sûr de ce qu'il faut utiliser pour la valeur, car il n'y a pas un nombre de colonnes dans le jeu de données que je peux utiliser comme valeur dans une groupByKey ou reduceByKey. J'ai pensé à l'aide d'un reduceByKey (), mais qui nécessite une paire clé-valeur et je ne veux compter de la clé et de faire un compteur de la valeur. Comment puis-je aller à ce sujet?
val lines = sc.textFile("/home/cloudera/desktop/file.txt")
val split_lines = lines.map(_.split(","))
val femaleOnly = split_lines.filter(x => x._10 == "Female")
C'est là que je suis bloqué. Le pays est l'indice de 13 dans l'ensemble de données.
La sortie de quelque chose devrait ressembler à ceci:
(Australie, 201000)
(Amérique, 420000)
etc
Toute aide serait super.
Grâce
OriginalL'auteur user2768498 | 2015-06-03
Vous devez vous connecter pour publier un commentaire.
Vous y êtes presque! Tous vous avez besoin est un countByValue:
(Dans votre exemple, je suppose que tu voulais dire x(10) plutôt que de x._10)
Tous ensemble:
Vous ne devriez pas par défaut à l'aide de countByValue, que les forces de l'ensemble de la carte sur le nœud maître (il renvoie à un non-RDD). apachesparkbook.blogspot.com/2015/11/countbyvalue-example.html au Lieu de cela, vous devriez
femaleOnly.map((_(13), 1)).reduceByKey(_+_)
, qui conserve tous les calculs et les données sur les nœuds de travail.OriginalL'auteur dpeacock
Avez-vous pensé à la manipulation de votre CA à l'aide de la Dataframes API ?
Il semble que vous êtes en train de charger un fichier CSV, que vous pouvez faire avec spark-csv.
Ensuite, c'est une simple question (si votre fichier CSV est intitulé à l'évidence des noms de colonne):
Si vous souhaitez aller plus loin dans ce genre de manipulation, voici le guide:
https://spark.apache.org/docs/latest/sql-programming-guide.html
OriginalL'auteur huitseeker
Vous pouvez facilement créer un clé, il n'a pas à être dans le fichier/base de données. Par exemple:
ce retour <key, iteratable>. Vous pouvez mapper encore quelque chose comme - val countryGenderCount = countryGender.map(lambda ligne : (ligne[0], len(ligne[1].de données)))
OriginalL'auteur oleksii