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

使用PySpark Pandas读取含空格文件路径报错的解决咨询

解决PySpark Pandas读取含空格的ABFSS路径Excel文件报错问题

问题重现

尝试读取包含空格的ABFSS路径Excel文件:

abfss://myaccount@myorganisation.dfs.core.windows.net/perils_database/Bushfire AUSTRALIA - PERILS Industry Exposure Database 2023.xlsx

使用以下代码:

import pyspark.pandas as ps

input_file = "abfss://myaccount@myorganisation.dfs.core.windows.net/perils_database/Bushfire AUSTRALIA - PERILS Industry Exposure Database 2023.xlsx"

ps.read_excel(input_file)

触发错误:

IllegalArgumentException: Illegal character in path at index 97: abfss://myaccount@myorganisation.dfs.core.windows.net/perils_database/Bushfire AUSTRALIA - PERILS Industry Exposure Database 2023.xlsx

解决方案

方案1:对路径中的空格进行URL编码

将路径里的空格替换为URL编码字符%20,可手动替换或用urllib.parse.quote自动处理:

import pyspark.pandas as ps
from urllib.parse import quote

input_file = "abfss://myaccount@myorganisation.dfs.core.windows.net/perils_database/Bushfire AUSTRALIA - PERILS Industry Exposure Database 2023.xlsx"
# 拆分路径,仅对主机后的部分编码
base, path_part = input_file.split('net/', 1)
encoded_path = quote(path_part)
encoded_input_file = f"{base}net/{encoded_path}"

ps_df = ps.read_excel(encoded_input_file)

方案2:借助Spark原生API读取后转换为PySpark Pandas DataFrame

Spark原生的文件读取对含空格的路径支持更友好,先通过Spark读取Excel,再转换为PySpark Pandas格式:

from pyspark.sql import SparkSession
import pyspark.pandas as ps

# 初始化SparkSession(若未初始化)
spark = SparkSession.builder.appName("ReadExcel").getOrCreate()

input_file = "abfss://myaccount@myorganisation.dfs.core.windows.net/perils_database/Bushfire AUSTRALIA - PERILS Industry Exposure Database 2023.xlsx"
# 读取Excel,需确保已加载spark-excel依赖
spark_df = spark.read.format("com.crealytics.spark.excel") \
    .option("header", "true")  # 根据实际情况设置是否有表头
    .load(input_file)

# 转换为PySpark Pandas DataFrame
ps_df = spark_df.to_pandas_on_spark()

注意:使用此方案需确保Spark环境已安装spark-excel依赖,启动Spark时可通过参数指定:--packages com.crealytics:spark-excel_2.12:0.18.5(版本需与Spark版本匹配)。

原因说明

PySpark Pandas的read_excel方法在处理ABFSS路径时,未自动对空格进行URL转义,导致空格被识别为非法字符。通过URL编码或借助Spark原生读取能力,可规避该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:22:37