我有一张这样的表
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%,如何处理这个精度错误? 谢谢
答案 0 :(得分:2)
将round
第二个参数更改为1
,精度错误将会消失。不幸的是,123
不是最好的数字,而且提高精度会增加你的错误。