Spark集群运行作业时出现FileNotFound问题求助
问题分析与解决方案
核心问题:文件路径处理错误
你代码里的file_path = "file://"+file是错误的,原因如下:
spark.sparkContext.addFile(url)会将远程文件分发到所有Worker节点的临时目录,SparkFiles.get("cities_data_bank.csv")直接返回该文件在Executor本地的绝对路径,不需要额外添加file://前缀。- 当你用
file://前缀时,Spark的readAPI会尝试从Driver节点的本地文件系统读取文件,而Driver所在容器(或提交机器)中并没有这个文件,因此抛出FileNotFound错误。
修复后的代码
修改读取文件的逻辑即可:
spark = SparkSession.builder \ .appName("Api-app") \ .getOrCreate() url = "https://gist.githubusercontent.com/aakashjainiitg/dbb668c58839d68d7903f508bf55043c/raw/1feec07802b4f53aceac450fa1aee5a87d9276e0/cities_data_bank.csv" spark.sparkContext.addFile(url) file = SparkFiles.get("cities_data_bank.csv") # 直接使用SparkFiles返回的路径,无需拼接file:// df = spark.read.format("csv").option("header", "true").load(file) df.show() spark.stop()
额外优化验证点
- Worker节点网络检查:进入任意Worker容器执行
curl <你的CSV文件URL>,确认能正常下载文件,避免网络不通导致文件未成功分发。 - Master地址优化:提交命令中的
spark://9e4ebff1f71b:7077可替换为spark://spark-master:7077(Docker Compose中服务名可直接解析),避免容器重启后IP变化引发的连接问题。
内容的提问来源于stack exchange,提问作者Steven St
相关产品推荐
相关产品推荐

