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_pathfixture对象,不要加括号调用(避免传递函数对象)。 - 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
相关产品推荐
相关产品推荐

