PySpark调用randomSplit报错:'NoneType'对象无该属性
问题解决:PySpark randomSplit报AttributeError(NoneType无此属性)
错误原因
你犯了一个PySpark常见用法错误:DataFrame.show()方法的返回值是None,你把这个返回值赋值给了final_df,导致final_df变成NoneType,调用randomSplit时自然报错。
show()是PySpark的**动作(Action)**方法,它仅负责将DataFrame内容打印到控制台,不会返回DataFrame对象本身。
修正代码
把赋值和打印操作分开,正确写法如下:
# 先赋值得到合法的DataFrame对象 final_df = output.select("features", "medv") # 单独调用show()查看数据,不影响final_df的类型 final_df.show() # 现在可正常调用randomSplit拆分数据集 train_df, test_df = final_df.randomSplit([0.7, 0.3])
额外注意
PySpark方法分为两类,需注意区分:
- 转换(Transformation):比如
select()、filter(),这类方法返回新的DataFrame,可链式调用或赋值给变量。 - 动作(Action):比如
show()、count()、collect(),这类方法触发计算并返回非DataFrame结果(如None、数值、列表),不能将它们的返回值当作DataFrame使用。
内容的提问来源于stack exchange,提问作者Spencer
相关产品推荐
相关产品推荐

