Saltar al contenido

Cómo excluir varias columnas en el marco de datos Spark en Python

Solución:

Simplemente con select:

df.select([c for c in df.columns if c not in {'GpuName','GPU1_TwoPartHwID'}])

o si realmente quieres usar drop luego reduce debería hacer el truco:

from functools import reduce
from pyspark.sql import DataFrame

reduce(DataFrame.drop, ['GpuName','GPU1_TwoPartHwID'], df)

Nota:

(diferencia en el tiempo de ejecución):

No debería haber ninguna diferencia en lo que respecta al tiempo de procesamiento de datos. Si bien estos métodos generan diferentes planes lógicos, los planes físicos son exactamente los mismos.

Sin embargo, hay una diferencia cuando analizamos el código del lado del conductor:

  • el primer método realiza solo una llamada JVM, mientras que el segundo tiene que llamar a JVM para cada columna que debe excluirse
  • el primer método genera un plan lógico que es equivalente al plan físico. En el segundo caso se reescribe.
  • finalmente las comprensiones son significativamente más rápidas en Python que métodos como map o reduce
  • Spark 2.x + admite varias columnas en drop. Consulte SPARK-11884 (Suelta varias columnas en la API de DataFrame) y SPARK-12204 (Implementar el método de caída para DataFrame en SparkR) para detalles.

En el método PySpark 2.1.0 drop admite varias columnas:

PySpark 2.0.2:

DataFrame.drop(col)

PySpark 2.1.0:

DataFrame.drop(*cols)

Ejemplo:

df.drop('col1', 'col2')

La forma correcta de hacer esto es:

df.drop(*['col1', 'col2', 'col3'])

los * debe salir de los corchetes si hay varias columnas para eliminar.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *