如何获取PySpark中toDF方法的Python帮助文档?
PySpark中toDF方法文档访问及通用规则问题
背景
我正在学习Python和PySpark,已在Windows系统的Anaconda环境中完成PySpark的安装与验证,验证代码运行正常:
>>> import findspark >>> findspark.init() >>> findspark.find() 'C:\\Users\\User.Name\\anaconda3\\envs\\py39\\lib\\site-packages\\pyspark' >>> from pyspark.sql import SparkSession >>> spark = SparkSession.builder.appName('SparkExamples.com').getOrCreate() >>> data = [("Java","20000"), ("Python","100000"), ("Scala","3000")] >>> columns = ["language","users_count"] >>> df = spark.createDataFrame(data).toDF(*columns) >>> df.show() +--------+-----------+ |language|users_count| +--------+-----------+ | Java| 20000| | Python| 100000| | Scala| 3000| +--------+-----------+
我尝试获取createDataFrame和toDF方法的帮助文档:通过help(spark.createDataFrame)可正常获取createDataFrame的帮助,但多种方式尝试后仍无法获取toDF方法的帮助:
>>> help(spark.toDF) AttributeError: 'SparkSession' object has no attribute 'toDF' >>> help(DataFrame.toDF) NameError: name 'DataFrame' is not defined >>> help(spark.DataFrame.toDF) AttributeError: 'SparkSession' object has no attribute 'DataFrame' >>> help(DataFrame) NameError: name 'DataFrame' is not defined >>> help(spark.DataFrame) AttributeError: 'SparkSession' object has no attribute 'DataFrame'
问题
- 如何访问
toDF方法的文档? - 能否根据上述验证代码推断出帮助文档的通用访问规则?
解答
1. 访问toDF方法文档的正确方式
toDF是PySpark DataFrame类的实例方法,你的代码中spark.createDataFrame(data)返回的正是DataFrame对象,所以要获取它的帮助文档,有两种可行方式:
- 方式一:先导入DataFrame类再查看
from pyspark.sql import DataFrame help(DataFrame.toDF)
- 方式二:通过已创建的DataFrame实例
df直接查看
help(df.toDF)
这两种方式都能正常获取toDF的帮助文档,前者是通过类本身访问方法文档,后者是通过类的实例访问。
2. PySpark帮助文档的通用访问规则
从你的操作过程可以总结出以下核心规则:
- 实例方法的访问:如果方法属于某个类的实例(比如
spark.createDataFrame中,createDataFrame是SparkSession实例的方法),直接用help(实例.方法名)即可;如果方法属于其他类的实例(比如toDF属于DataFrame),要么先导入对应类,要么通过该类已存在的实例来访问。 - 类的引用要求:要访问某个类或类的方法,必须先从对应模块导入该类(比如
from pyspark.sql import DataFrame),不能通过其他类的实例去间接引用(比如spark.DataFrame是错误用法,因为SparkSession实例并不包含DataFrame属性)。 - 链式调用的方法归属:链式调用里的每个方法都属于前一步调用返回对象的类,比如
spark.createDataFrame(data).toDF()中,createDataFrame返回DataFrame实例,因此toDF是DataFrame的方法,而非SparkSession的方法。
内容的提问来源于stack exchange,提问作者user2153235
相关产品推荐
相关产品推荐

