Scala: Получение процента от количества объектов в списке

#scala #function #percentage

Вопрос:

Учитывая следующий набор данных под названием «df»:

 Name | Sex
John | man
Peter| man
Henry| man
Mary | woman
 

Я хотел бы определить функцию, которая возвращает мне это:

 Percentage of men: 75%
Percentage of women: 25%
 

У меня возникли проблемы, потому что «мужчины» и «женщины» имеют строковый тип и нужно добавить символ процента (%). Также я хотел бы уточнить, что я использую IntelliJ для программирования в Scala.

Комментарии:

1. Смотреть на groupBy() . Если вы groupBy(_.Sex) , то у вас будут все man элементы в одном List и все woman элементы в другом.

2. Просто чтобы уточнить: это чистый Scala или набор данных Spark?

3. Это Скала! Я использую IntelliJ

4. Вопрос в том, как это хранится. Относится ли это List к какому-то классу случаев? Является ли это набором данных Spark? Это буквально в файле в виде открытого текста и должно быть проанализировано?

5. Он хранится как «Seq» . Набор данных получается из csv-файла после анализа. Например, я бы запустил функцию следующим образом: функция def (x: Seq[df]): (Двойной, Двойной) =

Ответ №1:

Как предложил jwvh, вы можете сделать что-то вроде этого:

 case class Person(name: String, sex: String)

val df: Seq[Person] = ???

df
  .groupBy(_.sex)
  .map { case (sex, persons) =>
    val percentage = persons.length * 100 / df.length
    s"Percentage of $sex: $percentage%"
  }
 

Это даст вам Seq[String] то, что вы можете использовать так, как вам хотелось бы.