Проблема с вашим кодом в том, что столбцы _nomeclature
и _revision
на самом деле не пусты, они содержат пустые строки, а не нули. Из-за этого вы не можете использовать isNotNull
, чтобы проверить, пуста ли ячейка, вам нужно использовать оператор =!=
.
Вы также можете использовать filter
и foldLeft
вместо foreach
, если вы хотите избежать использования изменяемого var
.
val df = List(("#id2","#id19", "", "zaa01947", "", "JTJHA31U2400"), ("#id2", "#id29", "", "zaa22408", "", null)).toDF("_manufacturerRef", "_masterRef", "_nomenclature", "_partNumber", "_revision", "_serialNumber")
val newDf = df.columns
.filter(c => df.where(df(c) =!= "").isEmpty) //find column containing only empty strings
.foldLeft(df)(_.drop(_)) //drop all found columns from dataframe
newDf.show()
И, как и ожидалось, _nomeclature
и _revision
отбрасываются в результате:
+----------------+----------+-----------+-------------+
|_manufacturerRef|_masterRef|_partNumber|_serialNumber|
+----------------+----------+-----------+-------------+
| #id2| #id19| zaa01947| JTJHA31U2400|
| #id2| #id29| zaa22408| null|
+----------------+----------+-----------+-------------+