pushFilters (DataSourceReader)

データ ソースにプッシュダウンできるフィルターの一覧を使用して呼び出されます。

フィルターの一覧は、要素の AND として解釈する必要があります。

フィルター プッシュダウンを使用すると、データ ソースはフィルターのサブセットを処理できます。 これにより、Spark で処理する必要があるデータの量を減らすことで、パフォーマンスを向上させることができます。

このメソッドは、クエリの計画中に 1 回呼び出されます。 既定では、すべてのフィルターが返され、フィルターをプッシュダウンできないことを示します。 サブクラスは、このメソッドをオーバーライドしてフィルター プッシュダウンを実装できます。

このメソッドは、データベースや GraphQL API などのフィルター処理をネイティブにサポートするデータ ソースにのみ実装することをお勧めします。

構文

pushFilters(filters: List[Filter])

パラメーター

パラメーター タイプ 説明
filters フィルターの一覧 データ ソースにプッシュダウンするフィルターの一覧。

返品

Iterable[Filter]

データ ソース スキャン後も Spark によって評価される必要があるフィルター。 これには、サポートされていないフィルターと部分的にプッシュされたフィルターが含まれます。 返されるすべてのフィルターは、参照による入力フィルターのいずれかである必要があります。

メモ

このメソッドは、 selfを変更できます。 オブジェクトはピック可能なままである必要があります。 selfに対する変更は、partitions()メソッドとread()メソッドに表示されます。

例示

フィルターの例と、 pushFiltersに渡される結果の引数:

フィルター プッシュダウン引数
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)]

pushFilters フィルターのみをサポートするEqualToを実装します。

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