Суммируйте большие десятичные числа в pyspark и смотрите все число - PullRequest
0 голосов
/ 30 мая 2019

У меня есть следующий фрейм данных:

from pyspark.sql import functions as f
from pyspark.sql import Window

df = spark.createDataFrame(sc.parallelize([["gr1", "1663708559.71"], ["gr1", "123958300.14"],["gr2", "2006101145.31"]]), ["group_col", "numb"])

И я хочу иметь новый столбец с суммой значений, сгруппированных по группам. Но у меня нет достойного вывода.

df.withColumn("sum_gr", f.sum(df["numb"].cast("double"))).over(Window.partitionBy(df["group_col"]))).show(10, False)

После того, как я вычислю сумму, мне нужно сравнить это большое значение с другим большим значением, и даже если они равны, я не получу совпадение.

У меня есть следующий результат: Для gr1: сумма 1.7876668500001E9 и я должен сравнить это значение, скажем, 1787666850000.143.

Как лучше всего работать с большими числами с плавающей точкой в ​​pyspark? Как мне сделать, чтобы все числа со всеми десятичными знаками были преобразованы в строку?

1 Ответ

0 голосов
/ 30 мая 2019

Попробуйте привести sum к decimal(38,3).Пожалуйста, отрегулируйте точность и масштаб соответственно.

Вот пример:

df.groupBy('group_Col').agg(F.sum('numb').cast('decimal(38,3)')).show()

#+---------+--------------------------------+
#|group_Col|CAST(sum(numb) AS DECIMAL(38,3))|
#+---------+--------------------------------+
#|      gr2|                  2006101145.310|
#|      gr1|                  1787666859.850|
#+---------+--------------------------------+

Пожалуйста, проверьте синтаксис оператора withColumn для столбца sum_gr.У него есть 2 дополнительные закрывающие скобки ')' после 'cast'.

...