データ ソースにプッシュダウンできるフィルターの一覧を使用して呼び出されます。
フィルターの一覧は、要素の 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