/ / Spark - Calcul Scala - scala, apache-spark

Spark - Calcul Scala - scala, apache-spark

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 № 1

Si 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))))