Сравнение наборов столбцов в pyspark - PullRequest
0 голосов
/ 07 марта 2019

У меня есть два списка столбцов, например, listA и listB. ListB является подмножеством listA.

Я хочу проверить, все ли столбцы в listB присутствуют в listA или нет, и на основании этого сравнения я хочу выполнить некоторую операцию.

Можно ли сделать то же самое?

Заранее спасибо.

1 Ответ

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

Это не проблема pyspark, а проблема с python:

Вариант 1: разработать для этого базовую функцию.Идея состоит в том, что вы прекращаете поиск, как только доказано, что элемент listA не содержится в listB.

def containsAllOf(listA, listB):
    for (e in listA):
        if (!listB.contains(e)):
            return false
    return true

Также это решение можно записать так (это более элегантно, но первый вариантможет сказать вам раньше, если данный список НЕ содержится во втором).

def containsAllOf(listA, listB):
    len([x for x in listA if x in listB]) == len(listA)

Вариант 2: использовать функции Pyton (теория множеств).Идея: если listA внутреннее соединение listB == listA, то все элементы listA наверняка содержатся в listB.

def containsAllOf(listA, listB):
    length(list(set(listA) & set(listB))) == length(listA)

Я не уверен, какой вариант подойдет вам лучше всего, вам нужно проверить.Это зависит от размеров обоих ваших списков.Но первый вариант уже имеет вполне приличную алгоритмическую сложность O (n).Второй вариант немного сложнее предсказать, но он может быть O (n log (n)) в зависимости от основной сложности объединения двух наборов в Python.

Если это решит вашу проблему, не стесняйтесьподнять голос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...