Las funciones de la tabla (TVF) han sido durante mucho tiempo una utensilio poderosa para procesar datos estructurados. Permiten que las funciones devuelvan varias filas y columnas en área de solo un valía único. Anteriormente, usando TVFS en Apache Spark™ requerido SQL, haciéndolos menos flexibles para los usuarios que prefieren la API de DataFrame.
Nos complace anunciar la nueva API de DataFrame para las funciones con títulos de tabla. Los usuarios ahora pueden invocar TVF directamente adentro de las operaciones de DataFrame, haciendo que las transformaciones sean más simples, más compuestas y completamente integradas con el flujo de trabajo de DataFrame de Spark. Esto está arreglado en Databricks Runtime (DBR) 16.1 y superior.
En este blog, exploraremos qué son TVF y cómo usarlos, tanto con argumentos progresar como de mesa. Considere los tres beneficios en el uso de TVT:
Beneficios esencia
- Integración de ámbito de datos nativo: Llame a TVFS directamente usando
spark.tvf.
sin penuria de SQL., - Encadenable y compuesto: Combine los TVF sin esfuerzo con sus transformaciones favoritas de DataFrame, como
.filter(), .select(),
y más. - Soporte de unión contiguo (arreglado en DBR 17.0): Use TVFS en uniones para suscitar y expandir dinámicamente filas en función de los datos de cada fila de entrada.
Uso de la función DataFrame de función de la función valorada en la tabla
Comenzaremos con un ejemplo simple usando un TVF incorporado. Spark viene con avíos TVF como variant_explode
que expande las estructuras JSON en múltiples filas.
Aquí está el enfoque SQL:
Y aquí está el enfoque de API de traumatizado de datos equivalente:
Como puede ver anteriormente, es sencillo usar TVF de cualquier guisa: a través de SQL o la API de DataFrame. Los dos le dan el mismo resultado, utilizando argumentos escalares.
Aceptar argumentos de tabla
¿Qué pasa si quieres usar una tabla como argumento de entrada? Esto es útil cuando desea intervenir en filas de datos. Veamos un ejemplo en el que queremos calcular la duración y los costos de recorrer en automóvil y distinción.
Imaginemos un traumatizado de datos simple:
Necesitamos que nuestra clase maneje una fila de tabla como argumento. Tenga en cuenta que el eval
El método toma un Row
argumento de una tabla en área de un argumento progresar.
Con esta definición de manejo de un Row
Desde una tabla, podemos calcular el resultado deseado enviando nuestro ámbito de datos como argumento de tabla.
O puede crear una tabla, registrar el UDTF y usarla en una testimonio SQL de la subsiguiente guisa:
Alternativamente, puede conquistar el mismo resultado llamando al TVF con una unión contiguo, que es útil con los argumentos escalares (lea a continuación para un ejemplo).
Llevándolo al subsiguiente nivel: contiguo se une
Incluso puede usar JOINES LATERAL para citar a un TVF con un DataFrame completo, fila por fila. Tanto el soporte de argumentos laterales y argumentos de tabla está arreglado en el DBR 17.0.
Cada unión contiguo le permite citar a un TVF a través de cada fila de un ámbito de datos, expandiendo dinámicamente los datos en función de los títulos en esa fila. Exploremos un par de ejemplos con más de una sola fila.
Maniobra contiguo con TVF incorporados
Digamos que tenemos un ámbito de datos donde cada fila contiene una variedad de números. Como ayer, podemos usar variant_explode
para explotar cada matriz en filas individuales.
Aquí está el enfoque SQL:
Y aquí está el enfoque de ámbito de datos equivalente:
Limítrofe unirse con Python UDTFS
A veces, los TVF incorporados simplemente no son suficientes. Es posible que necesite una razonamiento personalizada para variar sus datos de guisa específica. ¡Ahí es donde las funciones de tabla definidas por el beneficiario (UDTFS) vienen al rescate! Python udtfs Permitirle escribir sus propios TVF en Python, dándole un control completo sobre el proceso de expansión de la fila.
Aquí hay un simple Python UDTF que genera una secuencia de números desde un valía original hasta un valía final, y devuelve tanto el número como su cuadrado:
Ahora, usemos este UDTF en una unión contiguo. Imagine que tenemos un ámbito de datos con columnas de inicio y finalización, y queremos suscitar las secuencias numéricas para cada fila.
Aquí hay otro ejemplo ilustrativo de cómo usar un UDTF usando un lateralJoin
(Ver documentación) con un ámbito de datos con ciudades y distancia entre ellas. Queremos aumentar y suscitar una tabla más nueva con información adicional, como tiempo para recorrer entre ellos en automóvil y distinción, próximo con costos adicionales en la tarifa aérea.
Usemos nuestra aerolínea distancias de datos de datos desde en lo alto:
Podemos modificar nuestro Python UDTF mencionado de en lo alto que calcula la duración y el costo de delirio entre dos ciudades haciendo el eval
Método Aceptar argumentos escalares:
Finalmente, llamemos a nuestro UDTF con un lateralJoin
dándonos la salida deseada. A diferencia de nuestro ejemplo de aerolínea mencionado, este UDTF eval
El método acepta argumentos escalares.
Conclusión
La API de DataFrame para funciones valoradas en la tabla proporciona un enfoque más cohesivo e intuitivo para la transformación de datos adentro de Spark. Demostramos tres enfoques para consumir TVF: SQL, DataFrame y Python UDTF. Al combinar TVF con la API de DataFrame, puede procesar múltiples filas de datos y conquistar transformaciones masivas.
Encima, al aprobar argumentos de tabla o usar uniones laterales a UDTF de Python, puede implementar una razonamiento comercial específica para deyección específicas de procesamiento de datos. Mostramos dos ejemplos específicos de transformación y aumento de la razonamiento de su negocio para producir la producción deseada, utilizando argumentos progresar y de tabla.
Le recomendamos que explore las capacidades de esta nueva API para optimizar sus transformaciones de datos y flujos de trabajo. Esta nueva funcionalidad está arreglado en el Apache Spark ™ 4.0.0 Release. Si es un cliente de Databricks, puede usarlo en DBR 16.1 y superior.