python - 舍入 double 值并转换为整数

标签 python apache-spark pyspark apache-spark-sql rounding

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

在上面的数据框中 col4double。现在我想将 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 值四舍五入到最接近的值

预期结果

+----+----+-------+----+
|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,它将四舍五入到小数点后两位,cast 到整数然后将向下舍入到最接近的数字。

改为使用:

df2 = df.withColumn("col4", func.round(df["col3"]).cast('integer'))

关于python - 舍入 double 值并转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50636311/

相关文章:

python - 将数据框列和外部列表传递给 withColumn 下的 udf

python - 在批处理模式下运行IBM Doors时要检测错误的用户名和密码

python - curl with POST 不工作,request.POST 为空

scala - 在 Spark Streaming 中反序列化来自 Kafka 的 Avro 格式数据给出空字符串和 0 for long

apache-spark - 如何使用 mapPartitions 和 saveAsTextFiles

apache-spark - Spark RDD : How to calculate statistics most efficiently?

python - 根据用户 ID PySpark 在训练测试中分割行

python - 使用python在优先级队列中打破平局

python - 在矩阵元素邻居中求和

apache-spark - 本地 Kafka 应用程序失败并显示 : NoSuchMethodError: createEphemeral