You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复PySpark中'function' object has no attribute 'rand'错误?

解决PySpark在Databricks中随机选取行的导入问题

别担心,作为PySpark新手遇到这类函数导入问题很正常,我来一步步帮你解决:

正确的两种实现方式

你要随机选取100行的思路是对的,问题出在rand函数的导入方式上,以下两种方法都能正常工作:

方式一:直接导入rand函数

这种方式适合只用到rand这一个函数的场景:

# 正确导入rand函数
from pyspark.sql.functions import rand

# 执行随机采样
training_data = data.orderBy(rand()).limit(100)

方式二:导入整个functions模块(更推荐)

如果后续要用到多个PySpark函数,建议把整个functions模块命名为F(行业通用写法),这样调用起来更方便:

# 导入functions模块并简写为F
from pyspark.sql import functions as F

# 用F.rand()调用随机函数
training_data = data.orderBy(F.rand()).limit(100)

为什么你之前的代码会报错?

来逐个分析你遇到的错误原因:

  • AttributeError: 'function' object has no attribute 'rand':你用了from pyspark.sql.functions import rand as F,这是把rand函数直接重命名成了F,此时F是一个函数,不是模块,自然没有F.rand()这个属性。
  • ModuleNotFoundError: No module named 'org':org是Scala语言里的包结构,PySpark完全不需要导入这个,这是混淆了Scala和PySpark的写法。
  • NameError: name 'rand' is not defined:你直接调用rand()但没有提前导入这个函数,Python解释器不知道它是什么,所以报错。

额外小技巧

如果希望每次运行代码时选中的随机行保持一致(方便调试和复现结果),可以给rand函数传入一个固定的种子值:

# 方式一的写法
training_data = data.orderBy(rand(seed=42)).limit(100)

# 方式二的写法
training_data = data.orderBy(F.rand(seed=42)).limit(100)

内容的提问来源于stack exchange,提问作者DataBach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:57:58