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

Spark读取多个CSV合并为DataFrame时出现DFS路径无效错误求助

问题分析与解决办法

核心问题

  1. 路径传递格式错误:spark.read.csv() 不接受逗号分隔的多路径字符串作为参数,你当前的写法会被当成单个包含逗号的无效路径,导致“不是有效的DFS文件名”错误;另外你的路径字符串末尾还有多余空格,也会干扰路径识别。
  2. 前缀缺失后的路径问题:去掉hdfs://前缀后提示路径不存在,是因为Spark默认会读取本地文件系统,而非HDFS——除非你已经在Spark配置中指定了fs.defaultFS为HDFS地址(比如hdfs://namenode:9000)。

解决办法

方法1:读取指定的多个CSV文件

把多个路径放到数组中传递,或者直接传入多个参数:

// 方式一:用数组传递
val filePaths = Array("hdfs://path/to/file/file1.csv", "hdfs://path/to/file/file2.csv")
val df = spark.read.csv(filePaths: _*)

// 方式二:直接传多个参数
val df = spark.read.csv("hdfs://path/to/file/file1.csv", "hdfs://path/to/file/file2.csv")

方法2:读取目录下所有CSV文件(更推荐)

如果目标目录下只有CSV文件,直接传入目录路径即可自动读取所有文件;如果需要过滤后缀,用通配符:

// 读取目录下所有文件(仅当目录下都是CSV时适用)
val df = spark.read.csv("hdfs://path/to/file/")

// 读取目录下所有.csv后缀的文件
val df = spark.read.csv("hdfs://path/to/file/*.csv")

解决前缀问题

如果不想每次写hdfs://前缀,需要在Spark配置文件(spark-defaults.conf)中添加:

spark.hadoop.fs.defaultFS hdfs://你的namenode地址:端口

比如spark.hadoop.fs.defaultFS hdfs://localhost:9000,配置后直接写/path/to/file/就能指向HDFS路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:57:19