聚合后DataFrame中的行顺序

时间:2017-09-27 12:47:19

标签: python apache-spark pyspark spark-dataframe

假设我有一个数据帧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与预期的数据框进行比较。我应该比较它们忽略行的顺序。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

数据框中行的排序不固定。有一种简单的方法可以在测试用例中使用预期的Dataframe

执行数据帧差异。对于scala:

   assert(df1.except(expectedDf).count == 0)

   assert(expectedDf.except(df1).count == 0)

对于python,你需要替换,除了减去

来自文档:

  

减法(其他)   返回一个新的DataFrame,其中包含此帧中的行,但不包含在另一帧中。

     

这相当于SQL中的EXCEPT。