我有2个pyspark Dataframe ,如附件中所示。expected_df和actual_df
在我的单元测试中,我试图检查两者是否相等。
我的代码是
expected = map(lambda row: row.asDict(), expected_df.collect())
actual = map(lambda row: row.asDict(), actaual_df.collect())
assert expected = actual
因为两个DFS相同,但是行顺序不同,所以Assert在这里失败比较这样DFS最好方法是什么
7条答案
按热度按时间gdx19jrr1#
你可以试试
pyspark-test
https://pypi.org/project/pyspark-test/
这是受pyspark的panadas测试模块的启发。
使用简单
此外,除了比较 Dataframe ,就像Pandas测试模块一样,它还接受许多可选参数,您可以在文档中检查这些参数。
注意事项:
.toPandas
并使用panadas测试模块可能不是正确的方法。1.此软件包用于单元/集成测试,因此适用于小型DFS
6psbrbz92#
这在某些pyspark文档中已完成:
assert sorted(expected_df.collect()) == sorted(actaual_df.collect())
rmbxnbpk3#
不幸的是,如果不对任何列(特别是键列)进行排序,就无法实现这一点,原因是没有guarantee for ordering of records in a DataFrame。您无法预测记录在 Dataframe 中的出现顺序。下面的方法对我来说很有效:
k4emjkb14#
我们用Spark的散列函数对每一行进行散列,然后对结果列求和,从而解决了这个问题。
ercv8c1e5#
尝试使用“==”而不是“="。assert预期==实际
wj8zmpe16#
我有两个顺序相同的 Dataframe 。比较这两个我用途:
eqqqjvef7#
另一种确保排序顺序的方法是: