Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se llama con la lista de filtros que se pueden insertar en el origen de datos.
La lista de filtros debe interpretarse como and de los elementos.
Filter pushdown permite a la fuente de datos manejar un subconjunto de filtros. Esto puede mejorar el rendimiento reduciendo la cantidad de datos que Spark debe procesar.
Este método se llama una vez durante la planificación de la consulta. De forma predeterminada, devuelve todos los filtros, lo que indica que no se puede insertar ningún filtro. Las subclases pueden invalidar este método para implementar la inserción de filtros.
Se recomienda implementar este método solo para los orígenes de datos que admiten de forma nativa el filtrado, como las bases de datos y las API de GraphQL.
Sintaxis
pushFilters(filters: List[Filter])
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
filters |
lista de filtros | Lista de filtros que se van a insertar en el origen de datos. |
Devoluciones
Iterable[Filter]
Filtros que Spark todavía necesita evaluar después del examen del origen de datos. Esto incluye filtros no admitidos y filtros parcialmente insertados. Cada filtro devuelto debe ser uno de los filtros de entrada por referencia.
Notas
Este método puede modificar self. El objeto debe permanecer seleccionable. Las modificaciones a self son visibles para los partitions() métodos y read() .
Ejemplos
Filtros de ejemplo y los argumentos resultantes pasados a pushFilters:
| Filtros | Argumentos de inserció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)] |
Implemente pushFilters solo para admitir EqualTo filtros:
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