PySpark读取HDFS文件报错:DataFrameReader无take属性(Spark 2.4.3)
解决PySpark中
AttributeError: DataFrameReader object has no attribute 'take'的问题 嗨,刚接触PySpark很容易踩这个小坑,我来帮你捋清楚~
错误原因
你写的代码spark.read.format("hdfs:\\test\a.txt")返回的是DataFrameReader对象——这只是Spark用来配置读取参数的工具类,还没有真正读取文件生成DataFrame。而take()是DataFrame才有的方法,所以自然会抛出属性错误。
另外还要注意HDFS路径的写法:你用的hdfs:\\test\a.txt是Windows风格的转义写法,在PySpark里应该用正斜杠,或者用原始字符串避免转义问题,比如"hdfs://test/a.txt"或者r"hdfs://test/a.txt"。
正确的代码写法
有两种简洁的方式可以正确读取文本文件并生成DataFrame:
- 使用
format()+load()的标准流程:
# 先指定读取格式为text,再加载HDFS路径 t = spark.read.format("text").load("hdfs://test/a.txt") # 现在t是DataFrame了,可以调用take() t.take(1)
- 使用文本文件的快捷方法
text():
# 直接用read.text()读取文本文件,更简洁 t = spark.read.text("hdfs://test/a.txt") t.take(1)
这样执行后就能得到你预期的第一条数据啦~
内容的提问来源于stack exchange,提问作者Karthika David
相关产品推荐
相关产品推荐

