Ответ 1
Просто с select
:
df.select([c for c in df.columns if c not in {'GpuName','GPU1_TwoPartHwID'}])
или если вы действительно хотите использовать drop
, тогда reduce
должен выполнить трюк:
from functools import reduce
from pyspark.sql import DataFrame
reduce(DataFrame.drop, ['GpuName','GPU1_TwoPartHwID'], df)
Примечание
(разница во времени выполнения):
Не должно быть разницы, когда дело касается времени обработки данных. Хотя эти методы генерируют разные логические планы, физические планы в точности совпадают.
Однако при анализе кода на стороне водителя существует разница:
- первый метод делает только один вызов JVM, а второй - для вызова JVM для каждого столбца, который должен быть исключен.
- первый метод генерирует логический план, который эквивалентен физическому плану. Во втором случае оно переписывается.
- Наконец, в Python понимание значительно быстрее, чем методы типа
map
илиreduce
- Spark 2.x + поддерживает несколько столбцов в
drop
. См. SPARK-11884 (удалите несколько столбцов в API DataFrame) и SPARK-12204 (примените метод drop для DataFrame в SparkR) для detials.