Pyspark中如何让累加求和的计算结果保持为整数类型
PySpark累加求和结果保留整数解决方案
问题原因
- 操作对象不匹配:累加计算的结果存储在
df变量中,你后续类型转换操作的是原始datamonthly表,并未对计算后的结果表生效 - 依赖未导入:
IntegerType属于pyspark.sql.types下的类,未提前导入会导致类型转换逻辑失效 - 代码逻辑顺序错误:类型转换操作需在累加计算完成后,对存储了计算结果的DataFrame执行
解决方法
方法1:累加计算后单独转换类型
先导入对应类型依赖,再对计算后的结果表执行类型转换:
import sys import pyspark.sql.functions as F from pyspark.sql.window import Window from pyspark.sql.types import IntegerType # 执行累加计算 df = df.withColumn('last_x_month', F.sum(datamonthly.ix).over(Window.partitionBy().orderBy().rowsBetween(-sys.maxsize, 0))) # 对结果列做整型转换 df = df.withColumn("last_x_month", F.col("last_x_month").cast(IntegerType()))
方法2:累加计算时直接转换类型
在sum函数计算完成后直接嵌套cast操作,代码更简洁:
import sys import pyspark.sql.functions as F from pyspark.sql.window import Window from pyspark.sql.types import IntegerType df = df.withColumn('last_x_month', F.sum(datamonthly.ix).over(Window.partitionBy().orderBy().rowsBetween(-sys.maxsize, 0)).cast(IntegerType()) )
两种方案执行后输出的last_x_month列就会是整型格式,符合预期输出要求。
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

