Pytest Assert для сравнения данных Pyspark - PullRequest
0 голосов
/ 03 октября 2018

У меня есть 2 кадра данных pyspark, как показано в прикрепленном файле.Ожидаемый_дф и фактический_дф

enter image description here

В своем модульном тесте я пытаюсь проверить, равны ли оба или нет.

, для которого мой код

expected = map(lambda row: row.asDict(), expected_df.collect()) 
actual = map(lambda row: row.asDict(), actaual_df.collect()) 
assert expected = actual 

Так как оба dfs одинаковы, но порядок строк различен, поэтому здесь assert терпит неудачу.Какой лучший способ сравнить такие DFS.

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

К сожалению, это невозможно сделать без применения сортировки ни к одному из столбцов (особенно к ключевому столбцу), поскольку нет никакой гарантии для упорядочения записей в DataFrame .Вы не можете предсказать порядок, в котором записи появятся в кадре данных.Приведенный ниже подход прекрасно работает для меня:

expected = expected_df.orderBy('period_start_time').collect()
actual = actaual_df.orderBy('period_start_time').collect() 
assert expected = actual
0 голосов
/ 31 января 2019

Другой способ обеспечить порядок сортировки:

from pandas.testing import assert_frame_equal

def assert_frame_with_sort(results, expected, key_columns):
    results_sorted = results.sort_values(by=key_columns).reset_index(drop=True)
    expected_sorted = expected.sort_values(by=key_columns).reset_index(drop=True)
    assert_frame_equal(results_sorted, expected_sorted)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...