GroupBy ID, затем создайте столбцы на основе значений внутри строк - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь включить эту искру. Датафрейм:

ID  STATUS  COUNT
a     1      3
a     2      2
b     2      4
c     3      5
d     1      3
d     2      3

В это:

+---+---+---+---+
| ID|  1|  2|  3|
+---+---+---+---+
|  a|  3|  2|  0|
|  b|  0|  4|  0|
|  c|  0|  0|  5|
|  d|  3|  3|  0|
+---+---+---+---+

Я относительно новичок в этом, я думаю сделать что-то вроде:

df.withColumnRenamed("1", udf_sum_val1)
  .withColumnRenamed("2", udf_sum_val2)
  .withColumnRenamed("2", udf_sum_val3)

Затем делаем groupBy и суммируем все значения.

Потом делаю что-то из groupBys, но это не правильно. Мне интересно, может ли кто-нибудь вмешаться с лучшим подходом?

1 Ответ

0 голосов
/ 31 октября 2018

Не уверен, что вы хотите сделать (ваш пример несколько неясен), но это звучит как поворот:

val df = Seq(
  ("a", 1, 3),
  ("a", 2, 2),
  ("b", 2, 4),
  ("c", 3, 5),
  ("d", 1, 3),
  ("d", 2, 3)
).toDF("ID", "STATUS", "COUNT")

df
  .groupBy($"ID")
  .pivot("STATUS")
  .agg(sum($"COUNT"))
  .na.fill(0)
  .orderBy($"ID")
  .show()

+---+---+---+---+
| ID|  1|  2|  3|
+---+---+---+---+
|  a|  3|  2|  0|
|  b|  0|  4|  0|
|  c|  0|  0|  5|
|  d|  3|  3|  0|
+---+---+---+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...