Spark создает разумный план объяснения и применяет drop
после filter
. Вы можете видеть, что из плана объяснения, например,
spark.createDataFrame([('foo','bar')]).drop(col('_2')).filter(col('_2') == 'bar').explain()
Дает:
== Physical Plan ==
*(1) Project [_1#0]
+- *(1) Filter (isnotnull(_2#1) && (_2#1 = bar))
+- Scan ExistingRDD[_1#0,_2#1]
В приведенном выше плане объяснения проецирование отброшенного столбца происходит после фильтра.