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
oreduce
-
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)