如何使用PySpark读取S3指定文件夹下带ABC前缀的CSV文件?
使用PySpark读取S3中指定前缀的CSV文件
方法一:直接用路径通配符读取
这是最简便的方式,PySpark支持在路径中使用通配符匹配目标文件:
from pyspark.sql import SparkSession # 初始化SparkSession spark = SparkSession.builder.appName("ReadABCCSV").getOrCreate() # 读取s3://daily_file/下所有前缀为ABC的CSV文件 df = spark.read.csv( "s3://daily_file/ABC*.csv", header=True, # 若CSV包含表头,设为True inferSchema=True # 自动推断列数据类型,按需开启 ) # 查看数据示例 df.show()
ABC*.csv会精准匹配所有以ABC开头、.csv结尾的文件,无需额外筛选逻辑。
方法二:先列举目标文件再读取
如果需要更灵活的筛选规则(比如结合文件大小、修改时间等属性过滤),可以先用boto3列出符合条件的文件路径,再传给PySpark:
from pyspark.sql import SparkSession import boto3 # 初始化SparkSession spark = SparkSession.builder.appName("ReadABCCSV").getOrCreate() # 初始化S3客户端(需确保环境已配置AWS凭证,比如IAM角色、环境变量或本地凭证文件) s3_client = boto3.client("s3") bucket = "daily_file" target_prefix = "ABC" # 列出bucket中前缀为ABC的文件 response = s3_client.list_objects_v2(Bucket=bucket, Prefix=target_prefix) # 筛选出CSV格式的文件路径 csv_file_paths = [ f"s3://{bucket}/{item['Key']}" for item in response["Contents"] if item["Key"].endswith(".csv") ] # 读取筛选后的文件 df = spark.read.csv( csv_file_paths, header=True, inferSchema=True ) df.show()
内容的提问来源于stack exchange,提问作者Gavin
相关产品推荐
相关产品推荐

