Je veux calculer en utilisant spark et scala le h-ndex pour un chercheur (https://en.wikipedia.org/wiki/H-index) à partir d'un fichier CSV avec des données dans le format
R1: B, R1: A, R1: B, R2: C, R2: B, R2: A, R1: D, R1: B, R1: D, R2: B, R1: A, R1: B
L'indice h est l'indicateur académique d'unchercheur et il est calculé en créant une liste de sinlge pour tous les repreneurs avec leurs publications triées Par exemple, R1: {A: 10, B: 5, C: 1} et ensuite trouver l'index de la dernière position où une valeur est supérieure à son index (ici la position 2 parce que 1 <3).
Je ne peux pas trouver une solution pour étincelle en utilisant Scala. Quelqu'un peut-il aider?
Réponses:
1 pour la réponse № 1Si vous avez un fichier comme celui-ci:
R1:B, R1:A, R1:B, R2:C, R2:B, R2:A, R1:D, R1:B, R1:D, R2:B, R1:A, R1:B
R1:B, R1:A, R1:B, R2:C, R2:B, R2:A, R1:D, R1:B, R1:D, R2:B, R1:A, R1:B
R1:B, R1:A, R1:B, R2:C, R2:B, R2:A, R1:D, R1:B, R1:D, R2:B, R1:A, R1:B
Voici quelques réflexions:
// add a count field to each researcher:paper pair
input.flatMap(line => line.split(", ").map(_ -> 1)).
// count with research:paper as the key
reduceByKey(_+_).map{ case (ra, count) => {
// split research:paper
val Array(author, article) = ra.split(":")
// map so that the researcher will be new key
author -> (article, count)
// group result by the researcher
}}.groupByKey.collect
// res15: Array[(String, Iterable[(String, Int)])] = Array((R2,CompactBuffer((B,6), (A,3), (C,3))), (R1,CompactBuffer((A,6), (B,12), (D,6))))