如何用Spark递归读取多级子目录下指定名称的CSV文件?
解决方案
问题根源
你的代码存在两个关键问题:
- 参数名拼写错误:Spark的递归查找参数是**
recursiveFileLookup**(注意Lookup的首字母L大写),你写成了recursiveFilelookup,导致参数未生效。 - 路径格式与参数冲突:当启用
recursiveFileLookup时,无需在路径中添加/**/,否则会引发路径解析异常。
正确实现方式
方式一:修正参数名 + 简化路径
直接指定根目录,结合recursiveFileLookup递归遍历所有子目录下的X01.csv:
root_path = "rootpath" df = spark.read.format("csv") \ .option("recursiveFileLookup", "true") \ .option("header", "true") \ .load(f"{root_path}/X01.csv")
方式二:使用递归Glob路径(无需额外参数)
利用Spark支持的**递归通配符,直接匹配所有层级子目录下的目标文件:
df = spark.read.format("csv") \ .option("header", "true") \ .load("rootpath/**/X01.csv")
补充说明
- 若需匹配所有以
X开头的CSV文件(如X01.csv、X02.csv),只需将文件名通配符改为X*.csv即可。 - 确保你的Spark版本为2.4及以上,该版本才支持
recursiveFileLookup参数。
内容的提问来源于stack exchange,提问作者Pysparker
相关产品推荐
相关产品推荐

