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

Azure Synapse Notebook中df.to_csv写入ADLS报TypeError排查

问题根因

抛出TypeError: function() argument 'code' must be code, not str异常的核心原因是原生pandas的IO接口不支持识别ABFSS协议路径。
pandas的to_csv方法默认对接本地文件系统,会将传入的ABFSS路径字符串识别为本地磁盘路径,不会触发Azure Data Lake Storage的认证、远程写入逻辑,底层处理文件句柄时参数类型不匹配,最终触发该类型错误,和代码语法、CSV写入参数配置无关。

修复方案

Azure Synapse Notebook环境已预装所有Azure存储相关依赖,无需手动安装第三方包,可选择以下任意一种方案实现:

方案1:转换为Spark DataFrame写入(环境原生适配,推荐)

利用Synapse内置Spark引擎天然对接ADLS的能力,自动复用工作区托管身份的存储权限,无需手动处理认证逻辑:

# 将pandas DataFrame转换为Synapse环境原生的Spark DataFrame
spark_df = spark.createDataFrame(df)
# 以CSV格式写入ADLS指定路径
spark_df.coalesce(1).write.mode("overwrite") \
    .option("header", "true") \
    .option("encoding", "utf-8") \
    .csv("abfss://jobsdata@strxxxuei.dfs.core.windows.net/Jobs_newdata/data.csv")

相关参数说明:

  • coalesce(1):将输出结果合并为单个CSV文件,和pandas直接输出单文件的效果一致
  • mode("overwrite"):目标路径已存在时执行覆盖操作,可根据业务需求替换为append(追加)、ignore(路径存在则跳过写入)
  • option("header", "true"):写入时保留DataFrame列名作为表头,匹配原代码不写入行索引的需求

方案2:通过ADLS SDK获取文件对象传入pandas

如果必须直接使用pandas原生to_csv逻辑,可先通过Azure存储SDK获取ADLS目标文件的可写对象,再传入方法完成写入:

from azure.storage.filedatalake import DataLakeServiceClient
from azure.identity import DefaultAzureCredential

# 复用Synapse环境内置的默认认证凭证,无需手动配置密钥
service_client = DataLakeServiceClient(
    account_url="https://strxxxuei.dfs.core.windows.net",
    credential=DefaultAzureCredential()
)
# 定位到目标ADLS容器下的指定文件
file_client = service_client.get_file_system_client("jobsdata").get_file_client("Jobs_newdata/data.csv")
# 执行CSV写入
df.to_csv(file_client, sep=',', encoding='utf-8', index=False)

注意:使用该方案需提前给Synapse工作区的托管身份分配目标ADLS路径的Storage Blob Data Contributor权限,否则会触发权限拒绝错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:54:07