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

如何让Apache Spark CSV API仅读取CSV文件,排除.xlsx文件?

解决Spark CSV API读取文件夹时跳过.xlsx文件的问题

可以通过以下几种方式实现只读取CSV文件,避免读取.xlsx文件:

方法1:使用文件后缀通配符直接指定CSV文件

最直接的方式是在文件路径中使用*.csv通配符,让Spark只匹配后缀为.csv的文件:

SparkSession.option("header", "true")
            .option("delimiter", delimiter)
            .option("ignoreTrailingWhiteSpace", true)
            .option("ignoreLeadingWhitespaces", true)
            .csv(directoryPath + "\\" + feedFolder + "\\*.csv");

这种方式简单高效,Spark在扫描文件时会直接过滤掉非.csv后缀的文件,不会读取.xlsx或其他格式文件。

方法2:使用Spark的pathGlobFilter选项

可以通过设置pathGlobFilter配置项,指定需要匹配的文件模式:

SparkSession.option("header", "true")
            .option("delimiter", delimiter)
            .option("ignoreTrailingWhiteSpace", true)
            .option("ignoreLeadingWhitespaces", true)
            .option("pathGlobFilter", "*.csv")
            .csv(directoryPath + "\\" + feedFolder + "\\*");

这个选项会让Spark在读取文件时只保留符合*.csv模式的文件,同样能跳过.xlsx文件。

方法3:读取所有文件后过滤(适合复杂场景)

如果需要更灵活的过滤逻辑(比如同时读取CSV和TXT但跳过XLSX),可以先读取所有文件,再通过input_file_name()函数获取文件名并过滤:

import org.apache.spark.sql.functions.input_file_name

val df = SparkSession.option("header", "true")
                     .option("delimiter", delimiter)
                     .option("ignoreTrailingWhiteSpace", true)
                     .option("ignoreLeadingWhitespaces", true)
                     .csv(directoryPath + "\\" + feedFolder + "\\*")

// 过滤掉.xlsx文件
val filteredDf = df.filter(!input_file_name().endsWith(".xlsx"))

这种方式适合需要同时处理多种文件类型,但排除特定格式的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:27:52