Как посчитать и получить сумму значения для уникальных идентификаторов в кадре данных Spark? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть следующий Dataframe, и я собираюсь агрегировать по идентификаторам, а также суммировать столбец 'value' для каждого уникального идентификатора:

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

// some data...
val df = Seq(
  (1, 2),
  (1, 4),
  (1, 1),
  (2, 2),
  (2, 2),
  (3, 2),
  (3, 1),
  (3, 1)
).toDF("id","value")

df.show()

дает следующее:

+---+-----+
| id|value|
+---+-----+
|  1|    2|
|  1|    4|
|  1|    1|
|  2|    2|
|  2|    2|
|  3|    2|
|  3|    1|
|  3|    1|
+---+-----+

Используя функцию подсчета, я знаю, что могу подсчитать уникальные идентификаторы:

df.select("id").groupBy($"id").count.orderBy($"id".asc).show()

+---+-----+
| id|count|
+---+-----+
|  1|    3|
|  2|    2|
|  3|    3|
+---+-----+

, но я также хочу суммировать (или получить среднее значение) значения для каждого из уникальных идентификаторов.Таким образом, итоговая таблица должна выглядеть следующим образом:

+---+-----+----------+
| id|count|valueCount|
+---+-----+----------+
|  1|    3|         7|
|  2|    2|         4|
|  3|    3|         4|
+---+-----+----------+

Есть ли способ сделать это программно?

1 Ответ

0 голосов
/ 20 ноября 2018

Способ сделать это - использовать агрегатные функции.Sparks поставляется с несколькими предопределенными (среднее, сумма, число, сначала, список сбора, набор сбора, мин, макс, ...), так что вы всегда можете, на своем примере, сделать это так:

df.groupBy("id").agg(
    count("id").as("countOfIds"), 
    sum("id").as("sumOfIds"), 
    avg("id").as("avgOfIds")
).show
+---+----------+--------+--------+
| id|countOfIds|sumOfIds|avgOfIds|
+---+----------+--------+--------+
|  1|         3|       3|     1.0|
|  3|         3|       9|     3.0|
|  2|         2|       4|     2.0|
+---+----------+--------+--------+

Вы можете просмотреть определенные функции в документации sql.function пакета , просмотрев функции, определенные как «Агрегатные функции».Все они имеют эквивалент синтаксиса SQL, если вы используете синтаксис, ориентированный на SQL.

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