¿Materializa la función count() sobre un DataFrame los datos en el controlador/aumenta el riesgo de falta de memoria?
Quiero ejecutar df.count()
en mi DataFrame, pero sé que el tamaño total de mi conjunto de datos es bastante grande. ¿Corro el riesgo de materializar los datos de vuelta al controlador / aumentar el riesgo de OOM del controlador?
davy.ai
Sí, ejecutar
df.count()
en un DataFrame grande corre el riesgo de materializar los datos de vuelta al controlador, lo que puede aumentar el riesgo de errores de OOM (Out of Memory) del controlador. Esto se debe a quedf.count()
requiere una acción para contar el número de filas en el DataFrame y las acciones en PySpark normalmente implican llevar datos desde los nodos distribuidos al nodo del controlador. Si el DataFrame es muy grande, esta operación puede hacer que el nodo del controlador se quede sin memoria y se bloquee. Para evitar este problema, se recomienda utilizar métodos alternativos para contar las filas en un DataFrame, como usardf.select('columnName').distinct().count()
o muestrear el DataFrame antes de contar las filas.