PySpark中assertDataFrameEqual传入None DataFrame未抛异常问题咨询
PySpark assertDataFrameEqual 传入None时未抛出断言错误的问题
问题场景
使用PySpark的assertDataFrameEqual方法做DataFrame断言时,若其中一个参数传入None,方法不会抛出PySparkAssertionError,而是返回False;但当两个参数都是DataFrame但内容不一致时,会正常抛出断言错误。示例代码如下:
from pyspark.testing.utils import assertDataFrameEqual assertDataFrameEqual(spark.createDataFrame([("v1", "v3")]), None) # 返回 False from pyspark.testing.utils import assertDataFrameEqual assertDataFrameEqual(spark.createDataFrame([("v1", "v3")]), spark.createDataFrame([("v1", "v2")])) # 抛出 PySparkAssertionError
结论:非Bug,需调整测试逻辑
这不是Bug,是assertDataFrameEqual的设计逻辑导致的:该方法核心是对比两个合法DataFrame的内容一致性,当其中一个参数不是DataFrame实例(比如None)时,它会直接返回False,而非触发断言错误——断言错误仅在两个参数都是合法DataFrame、但内容不一致时抛出。
测试验证方式调整建议
如果需要在测试中确保传入的参数都是合法非空的DataFrame,建议在调用assertDataFrameEqual前,先单独添加非空校验:
from pyspark.testing.utils import assertDataFrameEqual df1 = spark.createDataFrame([("v1", "v3")]) df2 = None # 先校验参数非空 assert df1 is not None, "df1 不能为 None" assert df2 is not None, "df2 不能为 None" # 再执行DataFrame内容断言 assertDataFrameEqual(df1, df2)
这样当df2为None时,会先触发普通AssertionError,符合测试中对参数合法性校验的预期。
内容的提问来源于stack exchange,提问作者Davisson Paulino
相关产品推荐
相关产品推荐

