PySpark UDF数值异常:为何float类型计算结果不一致?
问题原因解析:PySpark UDF返回值异常
核心原因是精度不匹配:
- Python里的
float是64位双精度浮点数,有效精度能覆盖15-17位数字,完全能精确存储90125900这个数,所以直接调用函数时返回90125900.0。 - 而Spark的
FloatType是32位单精度浮点数,有效精度只有7-8位,90125900刚好卡在它的精度极限上,没办法精确存储,只能取最接近的可表示值——也就是90125904,所以UDF返回时就出现了这个偏差。
- Python里的
解决办法:
把UDF的返回类型改成DoubleType,让Spark用双精度存储结果,就能和Python函数直接调用的结果一致了。
内容的提问来源于stack exchange,提问作者Tarique
相关产品推荐
相关产品推荐

