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

Docker中Pytest测试临时文件夹异常及AttributeError问题排查

Docker下Pytest临时文件夹与Spark适配问题解决方案

问题根源

Spark的文件操作API仅支持字符串格式路径,无法直接识别pytest tmp_path fixture生成的PosixPath对象;若误将tmp_path当作函数调用(如tmp_path()),则会传递函数对象,触发对应属性错误。

修复步骤

  • 路径类型转换:将传递给Spark的临时路径用str()包裹,转为字符串格式:
    # 错误示例
    spark.write.csv(tmp_path)
    # 修复后
    spark.write.csv(str(tmp_path))
    
  • 修正tmp_path使用方式:确保直接使用tmp_path fixture对象,不要加括号调用(避免传递函数对象)。
  • Docker权限校验:确认容器内临时目录有读写权限,可在测试前添加验证:
    import os
    assert os.access(str(tmp_path), os.W_OK | os.R_OK)
    
  • Spark配置检查:确保Spark相关路径配置(如spark.sql.warehouse.dir)为字符串格式,不要使用路径对象。

测试验证示例

修改test_write函数如下,重新运行测试:

def test_write(spark_session, tmp_path):
    # 构造测试DataFrame
    test_df = spark_session.createDataFrame([(1, "demo")], ["id", "content"])
    # 转换临时路径为字符串
    output_dir = str(tmp_path / "test_output")
    # 写入文件
    test_df.write.csv(output_dir, header=True)
    # 读取验证
    result_df = spark_session.read.csv(output_dir, header=True)
    assert result_df.count() == 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:57:04