我需要使用银行家四舍五入(其中0.5四舍五入到最近的偶数)对PySpark中的一列进行四舍五入.

到目前为止,我已经试过了:

from pyspark.sql.functions round as _round

df = df.withColumn(new_name, col(old_name) * col('ExchangeRate'))
     
df = df.select("*", _round(col(new_name)))

即使我在Python 3+中运行这个函数,PySpark的舍入函数仍将应用半向上舍入方法.我不能使用Python的round(),因为它不适用于列对象.

有没有办法强制PySpark的舍入()使用银行家舍入?

推荐答案

你可以用pyspark.sql.functions中的bround.从文档中:

使用半_偶数舍入将给定值舍入到小数位数

import pyspark.sql.functions as F

df = spark.createDataFrame([(-1.5,), (-1.2,), (-0.6,), (-0.5,), (0.4,), (0.5,), (1.5,)], ["val"])

df.withColumn('round', F.round('val')).withColumn("bround", F.bround('val')).show()

+----+-----+------+
| val|round|bround|
+----+-----+------+
|-1.5| -2.0|  -2.0|
|-1.2| -1.0|  -1.0|
|-0.6| -1.0|  -1.0|
|-0.5| -1.0|   0.0|
| 0.4|  0.0|   0.0|
| 0.5|  1.0|   0.0|
| 1.5|  2.0|   2.0|
+----+-----+------+

Python相关问答推荐

Python plt.text中重叠,包adjust_text不起作用,如何修复?

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

如何通过多2多字段过滤查询集

使用polars .滤镜进行切片速度比pandas .loc慢

如何使用scipy从频谱图中回归多个高斯峰?

使用plotnine和Python构建地块

Django mysql图标不适用于小 case

图像 pyramid .难以创建所需的合成图像

如何在虚拟Python环境中运行Python程序?

使用@ guardlasses. guardlass和注释的Python继承

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

我们可以为Flask模型中的id字段主键设置默认uuid吗

如何使用它?

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

以逻辑方式获取自己的pyproject.toml依赖项

我对这个简单的异步者的例子有什么错误的理解吗?

如何求相邻对序列中元素 Select 的最小代价

有没有办法在不先将文件写入内存的情况下做到这一点?

如果不使用. to_list()[0],我如何从一个pandas DataFrame中获取一个值?

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?