pyspark中对于数值类型的值进行小数位数的保存可以通过两种方式处理,一个是select中结合functions里的bround,另一个是selectExpr中的结合round。 pyspark.sql中的functions.bround进行处理。 

方式1 : functions.bround('columnName',scale=value)

scale表示保留的小数位数,四舍五入。

#构建dataframe
rdd = sc.parallelize([("Sam", 28, 88.52, "M"),
                      ("Flora", 28, 90.55, "F"),
                      ("Mey", 1, None, "M"),
                      ("Chery", 7, 80.23, "F")])
test = rdd.toDF(["name", "age", "score", "sex"])
test.show()

from pyspark.sql import functions 
test2= test.select('name','age',functions.bround('score',scale=1).alias('socre'),'sex') # 进行了四舍五入的保留小数位数,scale表示保留的小数位数
test2.show() 

结果:score列 只保留1位小数了


+-----+---+-----+---+
| name|age|socre|sex|
+-----+---+-----+---+
|  Sam| 28| 88.5|  M|
|Flora| 28| 90.6|  F|
|  Mey|  1| null|  M|
|Chery|  7| 80.2|  F|
+-----+---+-----+---+


方式2 selectExpr中 round 

## selectExpr中 round 
 test3 = test.selectExpr('name','age','round(score,1) as score','sex')
 test3.show()

结果同上: 


+-----+---+-----+---+
| name|age|score|sex|
+-----+---+-----+---+
|  Sam| 28| 88.5|  M|
|Flora| 28| 90.6|  F|
|  Mey|  1| null|  M|
|Chery|  7| 80.2|  F|
+-----+---+-----+---+