如何将assertDataframeEqual错误输出格式化为可读的spark数据帧

问题描述 投票:0回答:1

假设如果我断言两个 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|
+---+
python dataframe pyspark assert
1个回答
0
投票

您不能直接使用 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

但是可以肯定的是,您需要在捕获异常后修改该部分,以便手动进行一些有意义的比较。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.