假设我有一个数据帧df
(从硬编码数组中创建用于测试)
+----+----+---+
|name| c1|qty|
+----+----+---+
| a|abc1| 1|
| a|abc2| 0|
| b|abc3| 3|
| b|abc4| 2|
+----+----+---+
我正在对其进行分组和汇总以获得df1
import pyspark.sql.functions as sf
df1 = df.groupBy('name').agg(sf.min('qty'))
df1.show()
+----+--------+
|name|min(qty)|
+----+--------+
| b| 2|
| a| 0|
+----+--------+
df1
中行的预期顺序是多少?
现在假设我正在编写单元测试。我需要将df1
与预期的数据框进行比较。我应该比较它们忽略行的顺序。最好的方法是什么?
答案 0 :(得分:1)
数据框中行的排序不固定。有一种简单的方法可以在测试用例中使用预期的Dataframe
执行数据帧差异。对于scala:
assert(df1.except(expectedDf).count == 0)
和
assert(expectedDf.except(df1).count == 0)
对于python,你需要替换,除了减去
来自文档:
减法(其他) 返回一个新的DataFrame,其中包含此帧中的行,但不包含在另一帧中。
这相当于SQL中的EXCEPT。