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

PySpark读取不同路径多CSV文件报错及多Schema文件合并咨询

问题分析与解决方案

错误原因

你把两个文件路径放在同一个字符串里用逗号分隔,Spark会将整个带逗号的字符串视为单个文件路径,而这个拼接出来的路径实际并不存在,因此抛出PATH_NOT_FOUND错误。单独读取时路径格式正确,但合并写法错误导致路径解析失败。

解决方案(同Schema文件合并)

以下三种方法可正确读取多个同Schema的CSV文件并合并为一个DataFrame:

方法1:传入路径列表

直接给load()方法传入包含多个路径的列表,Spark会自动合并同Schema的文件:

from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[1]").appName("Import_from_multiplefiles").getOrCreate()

# 用列表传入多个独立路径
file_paths = [
    "D:/Dir1/Dir1.1/File1.csv",
    "D:/Dir2/Dir2.1/File2.csv"
]
df2 = spark.read.format('csv').load(file_paths)
df2.show(5, False)

方法2:使用通配符(路径有规律时)

如果文件路径存在共同的命名或目录规律,可通过通配符*批量匹配:

# 示例:匹配Dir1、Dir2下所有子目录中的csv文件
df2 = spark.read.format('csv').load("D:/Dir*/Dir*.*/File*.csv")

方法3:分别读取后Union

先单独读取每个文件,再用union()合并(适合需要对单个文件做预处理的场景):

df1 = spark.read.format('csv').load("D:/Dir1/Dir1.1/File1.csv")
df2 = spark.read.format('csv').load("D:/Dir2/Dir2.1/File2.csv")
combined_df = df1.union(df2)
combined_df.show(5, False)

不同Schema文件的合并处理

可以合并不同Schema的CSV文件,需通过以下方式处理Schema差异:

方法1:启用mergeSchema参数

读取时设置mergeSchema=True,Spark会自动合并所有文件的Schema,缺失字段填充为null:

file_paths = [
    "D:/path/to/schema1.csv",
    "D:/path/to/schema2.csv"
]
df = spark.read.format('csv') \
    .option("header", "true")  # 若文件带表头需开启此参数
    .option("mergeSchema", "true") \
    .load(file_paths)

方法2:手动统一Schema

先定义一个统一的Schema,强制所有文件按该Schema读取,缺失字段填充null,多余字段被忽略:

from pyspark.sql.types import StructType, StructField, StringType, IntegerType

# 定义统一的目标Schema
unified_schema = StructType([
    StructField("id", IntegerType(), nullable=True),
    StructField("name", StringType(), nullable=True),
    StructField("age", IntegerType(), nullable=True)
])

df = spark.read.format('csv') \
    .option("header", "true") \
    .schema(unified_schema) \
    .load(file_paths)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:27:11