代码之家  ›  专栏  ›  技术社区  ›  Fran Arenas

Pyspark collect()方法在Pycharm或控制台中执行测试时给出了不同的顺序

  •  0
  • Fran Arenas  · 技术社区  · 2 年前

    我在pytest套件上进行了一些测试,将数据帧与 assert df1.collect() == df2.collect() .

    如果我在Pychar IDE中执行代码,测试就会通过,如果我在控制台中执行测试,就会引发断言错误。

    经过一些调试,我发现当我用控制台执行测试时,收集的结果是无序的。

    例如,如果我的数据帧有两行,则此代码将在Pycharm中传递,但在控制台中失败:

     assert df1.collect()[0] == df2.collect()[0]
    

    这个会在Pycharm中失败,但会在控制台中通过:

    assert df1.collect()[1] == df2.collect()[0]
    

    我尝试用调用pytest python3 -m pytest 就这样 pytest . Pycharm和控制台使用相同的venv

    1 回复  |  直到 2 年前
        1
  •  1
  •   Robert Kossendey    2 年前

    据我所知 .collect() 不保证任何订单。由于数据是从可能的多个执行器发送到驱动程序的,因此一个执行器可能比另一个执行器更快。如果可能的话,您应该将列表作为一个整体进行比较,而不是比较单个元素。

    例如。

    assertCountEqual(df1.collect(), df2.collect())