Почему я получаю неправильный результат агрегирования после использования оконной функции? - PullRequest
0 голосов
/ 26 апреля 2019

Я выполняю простую агрегацию сумм в Spark на фрейме данных, где ранее была применена оконная функция для фильтрации первых N строк в группе.Я делаю это неправильно?

final val ROW_NUMBER = "rn"

val w = Window.partitionBy("country","city").orderBy(col("value1").desc)

//Take <limit> top rows per partition
dataFrame
      .withColumn(ROW_NUMBER, row_number.over(w)).where(s"${ROW_NUMBER} <= ${limit}").drop(ROW_NUMBER)
      .groupBy("country","city")
      .agg(sum("value2")) as SUM

Так что перед groupBy есть 5 строк для определенной группы "страна-город" со следующими значениями в столбце "value2":

2365.043427972000
995.547820893999
654.523335518999
605.818748763294
506.335132493999

Сумма должна быть 5127.26846564229, но вместо этого я получаю 5122.31192618555, и это портит дальнейшие вычисления.

Используемый тип данных - Double, но я пробовал также с Decimal и не думаю, чтоэто связано с этим, но с тем, как я выполняю операции с окном и агг.

Также, если я сделаю .persist() до groupBy, я получу желаемый результат.

Так, как я могу решить этот неправильный расчет?

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