Fala pessoal, uma sugestão ao invés de utilizar .withColumn várias vezes para diferentes colunas seria utilizar um loop for. Basta indicar os rótulos das colunas dentro de uma lista e passar por esta lista iterando. Não parei para avaliar se é mais eficiente mas fica mais legível. Se alguém puder fazer uma comparação de eficiência seria enriquecedor.
colunas_convert_data = [
"data_situacao_cadastral",
"data_de_inicio_atividade",
"data_da_situacao_especial"
]
for coluna in colunas_convert_data:
estabelecimentos = estabelecimentos\
.withColumn(
coluna,
f.to_date(estabelecimentos[coluna].cast(StringType()), 'yyyyMMdd')
)