假设如果我断言两个 Spark 数据帧 df1、df2
df1:
id |
---|
1 |
df2:
id |
---|
2 |
通过使用
assertDataframeEqual(df1, df2)
,如果 df1 和 df2 之间不匹配,它将抛出以下文本格式的错误消息
PySparkAssertionError: [DIFFERENT_ROWS] Results do not match:
*** actual ***
! row(id = decimal('1'))
*** expected ***
! row(id = decimal('2'))
有没有办法将此 diff 输出转换为类似数据帧的 diff 格式,例如
df1.show()
:
+---+
| id|
+---+
| 1|
+---+
您不能直接使用 pyspark 执行此操作。查看 documentation,pyspark 在内部使用修改后的
difflib
来构造该错误消息,并且没有选项可以直接控制它。
当assertDataFrameEqual失败时,错误消息使用Python difflib库来显示实际和预期不同的每一行的差异日志。
您可以自己进行一些比较,但这在很大程度上取决于用例和数据帧的类型。一般模式可能是这样的:
from pyspark.errors import PySparkAssertionError
try:
assertDataFrameEqual(df1, df2)
except PySparkAssertionError as e:
# Do whatever comparsion you want here
print("Actual")
df1.show()
print("Expected")
df2.show()
raise e
但是可以肯定的是,您需要在捕获异常后修改该部分,以便手动进行一些有意义的比较。