/ / Іскра - розрахунок Scala - scala, apache-іскр

Іскра - розрахунок Scala - scala, apache-искря

Я хочу розрахувати, використовуючи іскри і скала h-ndex для дослідника (https://en.wikipedia.org/wiki/H-index) з файлу CSV з даними у форматі

R1: B, R1: A, R1: B, R2: C, R2: B, R2: A, R1: D, R1: B, R1: D, R2: B, R1: A, R1: B

H-індекс є академічним індикатором aдослідник, і він розраховується шляхом створення списку синглів для всіх реабілітаторів з сортуванням їхніх публікацій наприклад R1: {A: 10, B: 5, C: 1}, а потім знайти індекс останньої позиції, де значення більше, ніж його індекс (тут є позиція 2, оскільки 1 <3).

Я не можу знайти рішення для іскра з використанням scala. Чи може хто-небудь допомогти?

Відповіді:

1 для відповіді № 1

У випадку, якщо у вас є такий файл:

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

Ось деякі думки:

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