pushFilters (DataSourceReader)

Volané se seznamem filtrů, které je možné odeslat do zdroje dat.

Seznam filtrů by měl být interpretován jako A prvků.

Prosazení filtru umožňuje zdroji dat zpracovat podmnožinu filtrů. To může zvýšit výkon snížením množství dat, která je potřeba zpracovat Sparkem.

Tato metoda se volá jednou během přípravy dotazu. Ve výchozím nastavení vrátí všechny filtry, které označují, že se nedají vysunout žádné filtry. Podtřídy mohou tuto metodu přepsat, aby implementovala odsazení filtru.

Doporučuje se implementovat tuto metodu pouze pro zdroje dat, které nativně podporují filtrování, jako jsou databáze a rozhraní GraphQL API.

Syntaxe

pushFilters(filters: List[Filter])

Parametry

Parameter Typ Description
filters seznam filtrů Seznam filtrů, které se mají nasdílit do zdroje dat.

Návraty

Iterable[Filter]

Filtry, které musí Spark po kontrole zdroje dat vyhodnotit. To zahrnuje nepodporované filtry a částečně vložené filtry. Každý vrácený filtr musí být jedním ze vstupních filtrů podle odkazu.

Poznámky

Tato metoda je povolena k úpravě self. Objekt musí zůstat picklable. self Úpravy jsou viditelné pro tyto partitions() metody.read()

Příklady

Ukázkové filtry a výsledné argumenty předané:pushFilters

Filtry Argumenty odsdílení změn
a = 1 and b = 2 [EqualTo(("a",), 1), EqualTo(("b",), 2)]
a = 1 or b = 2 []
a = 1 or (b = 2 and c = 3) []
a = 1 and (b = 2 or c = 3) [EqualTo(("a",), 1)]

Implementujte pushFilters pro podporu EqualTo pouze filtrů:

def pushFilters(self, filters):
    for filter in filters:
        if isinstance(filter, EqualTo):
            # Save supported filter for handling in partitions() and read()
            self.filters.append(filter)
        else:
            # Unsupported filter
            yield filter