对pyspark中的大数小数求和,并查看整数

时间:2019-05-30 12:08:04

标签: pyspark pyspark-sql

我有以下数据框:

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

1 个答案:

答案 0 :(得分:0)

尝试将 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 |
#+ --------- + -------------------------------- +
 

请检查 sum_gr 列的 withColumn 语句的语法。 'cast'之后有2个额外的右括号')'。