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

Spark-submit执行jar包报FileNotFoundException,t.txt应存放位置及读取路径是什么?

问题核心原因

你当前使用的Source.fromFile("t.txt")是读取执行进程当前工作目录下的本地文件,spark-submit运行时,Driver和Executor的工作目录并非你的项目源码目录,且集群模式下Executor运行在不同节点,默认无法访问你本地开发环境的文件,因此抛出找不到文件的错误。

解决方案(按优先级推荐)

方案1:将t.txt作为资源文件打入JAR包(无额外配置、本地/集群通用)

  • 第一步:在项目src/main目录下新建resources文件夹(Maven默认会将该目录下所有文件打包进JAR的classes根路径),将t.txt放入该文件夹,如果需要保持原路径就新建resources/com/sk/data目录后放入
  • 第二步:修改读取代码,使用类加载器读取JAR内资源,不要使用文件读取API:
// 若文件直接放在resources根目录,路径写"t.txt";若放在resources/com/sk/data下,路径写"com/sk/data/t.txt"
val resourceStream = getClass.getClassLoader.getResourceAsStream("t.txt")
val wholeQuery = scala.io.Source.fromInputStream(resourceStream).mkString
  • 第三步:重新执行mvn clean package打包,直接提交生成的JAR即可

方案2:通过spark-submit参数分发文件(无需修改代码)

如果不想调整现有读取逻辑,提交时增加--files参数将文件分发到所有执行进程的工作目录:

spark-submit --class 你的主类全限定名 --files D:\SparkScalaExample\src\main\scala\com\sk\data\t.txt 你的jar包路径.jar

此时原代码Source.fromFile("t.txt")可直接正常运行。

方案3:使用共享存储(适合大文件/生产集群场景)

将t.txt上传到HDFS等共享存储,使用Spark原生API读取,示例:

val wholeQuery = spark.read.textFile("hdfs://你的namenode地址/存放路径/t.txt").collect().mkString

补充注意事项

如果仅在本地Windows环境运行Spark,直接写绝对路径时需要对反斜杠转义,比如D:\\SparkScalaExample\\t.txt,或者统一使用正斜杠D:/SparkScalaExample/t.txt。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:27:00