#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]
то, что вы можете использовать так, как вам хотелось бы.