Code Workbooks使用hadoop_path访问文件报File not found问题咨询
问题根因
该报错和Repository、Code Workbooks的功能限制无关,是代码存在两处逻辑错误:
fs.ls()返回的文件对象的path属性本身就是可直接访问的完整合法路径,额外拼接fs.hadoop_path会生成错误的重复路径,直接导致路径不存在。- Python原生的
open()方法仅支持读取本地磁盘文件,无法识别HDFS的分布式路径协议,哪怕路径拼接正确,用原生open()也读不到HDFS上存储的文件。
修正代码
import pandas as pd def contents(dataset_with_files): fs = dataset_with_files.filesystem() filenames = [f.path for f in fs.ls()] # 直接用文件系统实例自带的open方法读取文件,不要手动拼接路径 with fs.open(filenames[0], 'r') as f: t = f.read() return pd.DataFrame({"text": [t]})
注意事项
- 不要手动拼接
hadoop_path前缀,fs.ls()返回的路径已经是文件系统可识别的标准路径,手动拼接必然出错。 - 所有托管文件系统(包括HDFS)的读写操作,必须使用文件系统实例提供的
open()方法,不能直接调用Python内置的open()函数。 - 调试阶段可以先打印
filenames[0]确认目标文件路径符合预期,再执行读取操作。
内容的提问来源于stack exchange,提问作者aturc
相关产品推荐
相关产品推荐

