如何用本地Spark Session加载本地文件?Mac环境报错求助
解决Spark读取本地CSV文件的Path不存在异常
我之前在Mac上用IntelliJ+SBT跑本地Spark Session时也碰到过一模一样的org.apache.spark.sql.AnalysisException路径不存在异常,多半是路径拼写、文件权限或者工作目录的小问题,给你几个实用的排查和解决步骤:
1. 先确认文件真的在你指定的路径里
别光看代码里的路径,手动验证最靠谱:
- 打开Mac终端,输入命令:
如果终端返回文件名,说明路径完全正确;如果提示ls /Users/myuser/Documents/data/dataset.csvNo such file or directory,那要么是文件被移走了,要么是你拼写错了路径(比如把Documents写成Document,或者用户名myuser写错了),去Finder里找到文件,右键选「显示简介」,复制正确的路径再试。
2. 检查文件读取权限
有时候文件存在,但当前运行IntelliJ的用户没有读取权限:
- 终端输入命令查看权限:
看输出的权限列(比如ls -l /Users/myuser/Documents/data/dataset.csv-rw-r--r--),确保你的用户有读取权限(r标识)。如果没有,用下面的命令添加读取权限:chmod +r /Users/myuser/Documents/data/dataset.csv
3. 确认你的Spark Session是本地模式
如果你的Spark Session配置成了集群模式(比如YARN),那本地文件肯定找不到。检查你的SparkSessionWrapper代码,确保master是本地模式:
trait SparkSessionWrapper { lazy val spark: SparkSession = SparkSession.builder() .master("local[*]") // 必须是local开头的模式 .appName("LocalSparkDemo") .getOrCreate() }
4. 试试简化路径排查
如果上面的步骤都没问题,可以试试把CSV文件复制到你的IntelliJ项目根目录,用相对路径读取:
val data = spark.read.csv("dataset.csv")
如果这样能成功,说明之前的绝对路径可能有隐藏问题(比如路径里包含空格、特殊字符,这时候需要给路径加引号或者转义空格,比如"/Users/myuser/Documents/my data/dataset.csv")
另外你试的两种路径写法都是正确的:
- 直接用绝对路径
/Users/...:Spark本地模式下会自动识别为本地文件 - 带file协议的
file:///Users/...:三个斜杠是标准写法(file://协议头 + 绝对路径的/),完全没问题
内容的提问来源于stack exchange,提问作者J.Hammond
相关产品推荐
相关产品推荐

