如何在PySpark DataFrame中限制小数位数并为列值添加百分号
问题说明
你需要将PySpark DataFrame的Result列保留两位小数后拼接%符号,原代码运行出现属性错误。
错误原因
你的代码存在两处核心问题:
lit()是pyspark.sql.functions模块下的工具函数,不是DataFrame的内置方法,不能直接接在DataFrame对象后调用,这是触发AttributeError的直接原因。withColumn的参数顺序错误,正确参数顺序为withColumn(列名, 列计算逻辑),你原代码的参数顺序和逻辑拼接方式不符合PySpark语法要求。
正确实现代码
首先导入需要的依赖函数:
from pyspark.sql.functions import col, concat, lit, format_number
如果你的DataFrame已经存在计算完成的double类型Result列,直接格式化即可:
df = spark.read.csv(src_path, header=True, encoding='ISO-8859-1') df = df.withColumn("Result", concat(format_number(col("Result"), 2), lit("%")))
如果你需要先通过Month_start和Month_end计算Result再格式化,使用如下写法:
df = spark.read.csv(src_path, header=True, encoding='ISO-8859-1') df = df.withColumn("Result", concat( format_number(col("Month_start")/col("Month_end")*100, 2), lit("%") ))
逻辑说明
format_number(col("Result"), 2):将double类型的数值保留2位小数,返回字符串格式的结果concat(..., lit("%")):将格式化后的数值字符串和%符号拼接,得到最终需要的带百分号的结果
运行后即可得到你预期的输出格式。
内容的提问来源于stack exchange,提问作者user175025
相关产品推荐
相关产品推荐

