Сводка данных Spark DataFrame - PullRequest
0 голосов
/ 11 мая 2018

Скажем, у меня есть Spark SQL DataFrame, например:

name gender grade
-----------------
 Joe      M     3
 Sue      F     2
 Pam      F     3
 Gil      M     2
 Lon      F     3
 Kim      F     3
 Zoe      F     2

Я хочу создать отчет с отдельными значениями, например так:

numMales numFemales numGrade2 numGrade3
---------------------------------------
       2          5         3         4

Как лучше всего это сделатьэтот?Я знаю, как получить один из них по отдельности, например:

val numMales = dataDF.where($"gender" == "M").count

Но я не знаю, как поместить это в DataFrame или как объединить все результаты.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Использование when, sum и struct встроенных функций должно дать вам желаемый результат

import org.apache.spark.sql.functions._
dataDF.select(struct(sum(when(col("gender")==="M", 1)).as("numMales"), sum(when(col("gender")==="F", 1)).as("numFemales")).as("genderCounts"),
            struct(sum(when(col("grade")===2, 1)).as("numGrade2"), sum(when(col("grade")===3, 1)).as("numGrade3")).as("gradeCounts"))
    .select(col("genderCounts.*"), col("gradeCounts.*"))
  .show(false)

, который должен дать вам

+--------+----------+---------+---------+
|numMales|numFemales|numGrade2|numGrade3|
+--------+----------+---------+---------+
|2       |5         |3        |4        |
+--------+----------+---------+---------+
0 голосов
/ 11 мая 2018

Вы можете взорваться и развернуться:

import org.apache.spark.sql.functions._

val cols = Seq("gender", "grade")

df
  .select(explode(array(cols map (c => concat(lit(c), col(c))): _*)))
  .groupBy().pivot("col").count.show

// +-------+-------+------+------+                                                 
// |genderF|genderM|grade2|grade3|
// +-------+-------+------+------+
// |      5|      2|     3|     4|
// +-------+-------+------+------+
0 голосов
/ 11 мая 2018

Я бы сказал, что вам нужно .groupBy().count() вашего фрейма данных отдельно для каждого столбца, чтобы они объединяли ответы в новый фрейм данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...