python - 舍入双精度值并转换为整数
问题描述
我在 PySpark 中有一个数据框,如下所示。
import pyspark.sql.functions as func
df = sqlContext.createDataFrame(
[(0.0, 0.2, 3.45631),
(0.4, 1.4, 2.82945),
(0.5, 1.9, 7.76261),
(0.6, 0.9, 2.76790),
(1.2, 1.0, 9.87984)],
["col1", "col2", "col3"])
df.show()
+----+----+-------+
|col1|col2| col3|
+----+----+-------+
| 0.0| 0.2|3.45631|
| 0.4| 1.4|2.82945|
| 0.5| 1.9|7.76261|
| 0.6| 0.9| 2.7679|
| 1.2| 1.0|9.87984|
+----+----+-------+
# round 'col3' in a new column:
df2 = df.withColumn("col4", func.round(df["col3"], 2))
df2.show()
+----+----+-------+----+
|col1|col2| col3|col4|
+----+----+-------+----+
| 0.0| 0.2|3.45631|3.46|
| 0.4| 1.4|2.82945|2.83|
| 0.5| 1.9|7.76261|7.76|
| 0.6| 0.9| 2.7679|2.77|
| 1.2| 1.0|9.87984|9.88|
+----+----+-------+----+
在上面的数据框中col4
是double
. 现在我想转换col4
为Integer
df2 = df.withColumn("col4", func.round(df["col3"], 2).cast('integer'))
+----+----+-------+----+
|col1|col2| col3|col4|
+----+----+-------+----+
| 0.0| 0.2|3.45631| 3|
| 0.4| 1.4|2.82945| 2|
| 0.5| 1.9|7.76261| 7|
| 0.6| 0.9| 2.7679| 2|
| 1.2| 1.0|9.87984| 9|
+----+----+-------+----+
但我想将col4
值四舍五入到最接近的值
expected result
+----+----+-------+----+
|col1|col2| col3|col4|
+----+----+-------+----+
| 0.0| 0.2|3.45631| 3|
| 0.4| 1.4|2.82945| 3|
| 0.5| 1.9|7.76261| 8|
| 0.6| 0.9| 2.7679| 3|
| 1.2| 1.0|9.87984| 10|
+----+----+-------+----+
我怎样才能做到这一点?
解决方案
您应该使用该round
函数,然后转换为整数类型。但是,不要在round
函数中使用第二个参数。通过使用 2 将四舍五入到小数点后 2 位,cast
然后整数将向下舍入到最接近的数字。
而是使用:
df2 = df.withColumn("col4", func.round(df["col3"]).cast('integer'))
推荐阅读
- go - 下载和安装 Visual Studio Code Go 依赖项
- apache-spark - 如何将基本身份验证传递给 Confluent Schema Registry?
- erlang - 为什么透析器在 nocatch 上失败?
- regex - 如何在包含下划线的单词后提取文本?
- c# - 如何加载 XML 文件的属性
- c# - SAP Business One 使用 C# 添加 BP 活动
- kotlin - 如何从随机布尔生成器制作统一的随机整数生成器?
- php - 上传多张图片时获取多个json对象
- mapbox - 搜索 Mapbox 数据集
- java - 如何在android中读取txt文件?