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

PySpark批量读取Parquet生成DataFrame遇URISyntaxException报错求助

问题原因与解决方法

错误根源

报错的核心原因是路径字符串包含多余双引号,还存在一处协议格式错误:

  1. list_files里的每个路径被错误包裹了双引号(比如'"s3://x/y/..."'),Spark解析路径时会把引号当作路径的一部分,触发URI语法错误。
  2. 其中一条路径的S3协议写成了s3:/,正确格式应为s3://,缺少的斜杠也会导致解析失败。

修正步骤

1. 修复路径列表

去掉路径两端的双引号,并修正协议格式:

list_year = ['yt_2021', 'yt_2020']
list_files = [
    's3://x/y/nyc_taxi/yellow_taxi/yellow_tripdata_2021-*',
    's3://x/y/nyc_taxi/yellow_tripdata_2020-*'
]

2. 优化批量读取函数

原函数直接修改字符串列表的方式不够直观,建议用字典存储年份名称与对应DataFrame的映射,方便后续调用:

def read_parquet_multiple(list_year, list_files):
    df_map = {}
    # 用zip同时遍历名称和路径,代码更简洁
    for df_name, file_path in zip(list_year, list_files):
        df_map[df_name] = spark.read.parquet(file_path)
    return df_map

# 调用函数获取所有DataFrame
taxi_dfs = read_parquet_multiple(list_year, list_files)

# 按需访问具体年份的DataFrame
yt_2021 = taxi_dfs['yt_2021']
yt_2020 = taxi_dfs['yt_2020']

备选实现(保留列表模式)

如果坚持用列表存储结果,可以初始化空列表后追加DataFrame,示例如下:

# 初始化空列表用于存储DataFrame
year_dfs = []
list_files = [
    's3://x/y/nyc_taxi/yellow_taxi/yellow_tripdata_2021-*',
    's3://x/y/nyc_taxi/yellow_tripdata_2020-*'
]

def read_parquet_multiple(df_list, file_paths):
    for path in file_paths:
        df_list.append(spark.read.parquet(path))

read_parquet_multiple(year_dfs, list_files)
# 通过索引访问DataFrame
yt_2021 = year_dfs[0]
yt_2020 = year_dfs[1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:01:00