首页 > 解决方案 > 在 pyspark 中对小数求和并查看整数

问题描述

我有以下数据框:

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"])

我想要一个新列,其中包含按组 col 分组的值的总和。但我没有可读的输出。

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 中处理大浮点数时最好的方法是什么?我应该如何将所有小数的整个数字转换为字符串?

标签: pysparkpyspark-sql

解决方案


尝试投射sumto 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。它在'cast'之后有2个额外的右括号')'。


推荐阅读