Spark通过变量传递多Parquet文件路径报错,手动粘贴正常求解决
问题分析与解决
核心问题
你拼接出的是带单引号和逗号的整体字符串,但spark.read.parquet()的正确用法是接收多个独立的路径参数,或是路径列表(通过*解包)。当你把拼接后的长字符串传入时,Spark会将其视为单个路径,而路径开头的单引号'属于非法URI字符,因此抛出URISyntaxException。
而手动复制时,你实际上是把每个带引号的路径作为独立参数传递(相当于spark.read.parquet('path1', 'path2', ...)),这符合方法的参数要求,所以能正常执行。
解决方案
直接收集路径到列表中,再传递给read.parquet():
代码修改
# 收集所有路径到列表,无需拼接字符串 paths = [row["path"] for index, row in files.iterrows()] # 用*解包列表,将每个路径作为独立参数传入 sdf = spark.read.parquet(*paths)
另一种兼容写法
部分Spark版本也支持直接传入路径列表:
sdf = spark.read.parquet(paths)
补充说明
- 避免手动拼接带引号的字符串,这种方式容易引入语法错误,且不符合Spark API的参数规范。
- 所有文件schema一致的情况下,Spark会自动合并schema,无需额外配置。
内容的提问来源于stack exchange,提问作者user774952
相关产品推荐
相关产品推荐

