pyspark sql float精度错误

时间:2016-10-19 23:39:04

标签: sql pyspark precision

我有一张这样的表

    from pyspark import SparkConf, SparkContext
    from pyspark.sql import SQLContext, HiveContext,Row
    sqlContext = HiveContext(sc)
    from pyspark.sql.types import StringType, IntegerType,       StructType, StructField,LongType
    from pyspark.sql.functions import sum, mean,col


    rdd = sc.parallelize([('apple', 20),
    ('orange',33),
    ('pear',27),
    ('melon',31),
    ('plum',8),
    ('banana',4)])
    schema = StructType([StructField('fruit', StringType(), True),
                 StructField('fruit_number', IntegerType(),True)])
    df = sqlContext.createDataFrame(rdd, schema)
    df.registerTempTable('fruit_df_sql')

    #total_num = 123
    df_percent=spark.sql("""select fruit, round(fruit_number/123*100,2) as cnt_percent 
         from fruit_df_sql
         order by cnt_percent desc """)

     df_percent.agg(sum('cnt_percent')).show()

我想生成每一行的百分比但是当我总结百分比列时,我无法获得100% 这是我在pyspark中生成的代码

     +----------------+
     |sum(cnt_percent)|
     +----------------+
     |           99.99|
     +----------------+

但是我得到了这样的结果

{{1}}

不是100%,如何处理这个精度错误? 谢谢

1 个答案:

答案 0 :(得分:2)

round第二个参数更改为1,精度错误将会消失。不幸的是,123不是最好的数字,而且提高精度会增加你的错误。