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|
+-----+---+-----+---+