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

PySpark读取CSV文件时误读同目录TXT文件的问题

解决PySpark读取CSV时意外加载TXT文件的问题

当你用Spark读取文件夹路径时,默认会扫描并尝试解析文件夹下所有文件,不管后缀名——只要文件内容符合你指定的格式(这里是CSV),就会被加载进来。你的TXT文件因为列名和CSV一致、格式兼容,所以被一起读入了。

下面是几种高效的解决方法:

方法1:直接指定CSV后缀的文件路径

把加载路径改成带通配符的形式,只匹配.csv文件:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("CSV Reader").getOrCreate()

csv_path = "path/to/csv/folder/*.csv"  # 用*.csv匹配所有CSV文件

df = spark.read \
.format("csv") \
.option("header", "true") \
.option("inferSchema", "true") \
.load(csv_path)

方法2:使用pathGlobFilter选项过滤文件

在读取配置里添加pathGlobFilter参数,精准指定只加载后缀为.csv的文件:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("CSV Reader").getOrCreate()

csv_path = "path/to/csv/folder"

df = spark.read \
.format("csv") \
.option("header", "true") \
.option("inferSchema", "true") \
.option("pathGlobFilter", "*.csv")  # 新增过滤选项
.load(csv_path)

不推荐:读取后过滤(效率较低)

如果已经读取了所有文件,也可以通过input_file_name()函数获取行的源文件路径,再过滤掉TXT文件。但这种方法会先加载所有文件,效率不如前两种,仅作备选:

from pyspark.sql import SparkSession
from pyspark.sql.functions import input_file_name

spark = SparkSession.builder.appName("CSV Reader").getOrCreate()

csv_path = "path/to/csv/folder"

df = spark.read \
.format("csv") \
.option("header", "true") \
.option("inferSchema", "true") \
.load(csv_path)

# 过滤来源为TXT的行
df_filtered = df.filter(input_file_name().endswith(".csv"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:09