Я попробовал несколько вещей ...
1) Попробуйте кэшировать при создании dataframe
из файла csv
или любого другого источника
2) Кроме того, если это не влияет на логику, мы можем попробовать изменить это
if(dataset_.filter(col(c.name).isNull).count() > 0)
до if(flightData.filter(col(x.name).isNull).take(1) != null )
Вместо того, чтобы считать все данные, мы можем просто проверить, было ли какое-либо имя столбца нулевым или нет
Поскольку take(1)
будет двигаться дальше, как только он найдет хотя бы одну запись, тогда как .count()
продолжит работу и затем сравнит ее с 0
3) Более того, согласно текущей логике, мы можем изменить map
на foreach
. Однако это не повлияет на производительность, но в идеале должно быть foreach.
Я пробовал это на наборе данных, имеющем 16 столбцов и около 10 записей Lakh. Прошло 33 с после применения всех этих.
Вот снимок экрана Spark UI!
Поскольку у вас есть 500 столбцов, время выполнения должно уменьшиться в массовом масштабе при применении их по сравнению с моим набором данных.
Надеюсь, это поможет!