我要求求一列的总数,但它要求答案是十进制的,四舍五入到两位数。我很容易得到总数。我花了一点时间将其取整,但现在我有了它,值作为float对象返回。我想不出怎么把这个转换成小数。我尝试过将float转换成一个新的Dataframe,尝试过将float转换成doubletype,尝试过将其转换为sum公式的一部分,甚至尝试过多种方法对列求和。我搞不懂!
Dataframe有一个名为“tolls\u amount”的列。我尝试了两种求和的方法,两种方法似乎都不返回十进制类型(尽管都返回正确的答案):
df2 = df.withColumn("tolls_amount", df["tolls_amount"].cast(DoubleType()))
sum_number = df2[["tolls_amount"]].groupBy().sum().collect()[0][0]
df2 = df.withColumn("tolls_amount", df["tolls_amount"].cast(DoubleType()))
sum_number = df2.agg({"tolls_amount":"sum"}).collect()[0]
just_num = sum_number["sum(tolls_amount)"].round(2)
以下是我试图将其作为小数点的一些内容:
sum_number = df2[["tolls_amount"]].groupBy().sum().collect()[0][0]
sum_df = sum_number.withColumn("Total", sum_number.cast(DoubleType()))
sum_2 = sum_number.cast(DoubleType())
sum_number = df2[["tolls_amount"]].groupBy().sum().cast(DoubleType()).collect()[0][0]
我有一些其他的,但一直删除他们,因为他们不工作。有没有办法做到这一点?该列的总数为2430066.7000020845,四舍五入为2430066.7 round(sum_number, 2)
,但两者都有一种浮点类型,而不是十进制类型。
1条答案
按热度按时间bf1o4zei1#
您可以在聚合期间将数字四舍五入到小数点后2位,并在收集到python之前转换为十进制类型: