PySpark中round函数报‘Invalid argument, not a string or column’错误排查
问题原因与解决办法
错误原因
你遇到的问题核心是数据类型不匹配:
provider_out.count()返回整数,除以10000000后得到浮点型数值(比如45.0838586);- Python的
round()函数处理浮点值后,返回的仍然是浮点类型(比如round(45.0838586)得到45.0); - Spark的
repartition()方法要求传入的分区数必须是整数类型,不接受浮点型参数,因此触发了类型错误提示。
解决办法
只需把计算后的浮点值强制转换为整数即可,以下是几种可行写法:
方法1:强制转换round结果为整数
provider_out = get_provider(spark) numofpartitions = int(round(provider_out.count()/10000000)) provider_out.repartition(numofpartitions).write.mode("overwrite").parquet(dest_path)
方法2:使用整数除法(向下取整)
如果不需要四舍五入,直接用整数除法得到整数结果:
numofpartitions = provider_out.count() // 10000000
方法3:向上取整(确保剩余数据单独分区)
如果希望哪怕有少量剩余数据也单独分配一个分区,用math.ceil后转整数:
import math numofpartitions = int(math.ceil(provider_out.count() / 10000000))
内容的提问来源于stack exchange,提问作者Michael Gilman
相关产品推荐
相关产品推荐

