Как предотвратить игнорирование функции агрегирования NULL - PullRequest
0 голосов
/ 31 августа 2018

Предположим, у нас есть следующий DataFrame в (Py) Spark. (Я взял данные из этого вопроса .)

+----+--------+
|  id|idAsLong|
+----+--------+
|   0|       0|
|null|    null|
|   5|       5|
|null|    null|
|null|    null|
|  -8|      -8|
+----+--------+

Вопрос: Как определить / найти функцию smax, которая не игнорирует null. То есть .smax("isAsLong") дает null.

Этот вопрос возникает, когда я создаю сводную таблицу. А именно

df.groupBy("id").pivot("var").max("val")

дает таблицу, которая заполнена 0, даже если нет значения для вычисления.

1 Ответ

0 голосов
/ 01 сентября 2018

В качестве значения null можно использовать очень большое значение при вычислении максимального значения:

val borderValue = Long.MaxValue

// null as border value
df.select(max(when(isnull($"idAsLong"), borderValue).otherwise($"idAsLong")).alias("res"))

  // back to null
  .withColumn("res", when($"res" === borderValue, null.asInstanceOf[Long]).otherwise($"res"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...