Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro no código de sumarização. Como corrigir?

O que eu estou fazendo de errado? Tentei resolver convertendo faixa etária para double.

socios = socios.withColumn('faixa_etaria', socios['faixa_etaria'].cast(DoubleType()))

socios\
    .select('cnpj_basico', 'data_de_entrada_sociedade', 'faixa_etaria', 'cnpj_ou_cpf_do_socio')\
    .groupBy('data_de_entrada_sociedade')\
    .agg(\
         f.avg('faixa_etaria').alias('faixa_etaria_media'),\
         f.count('cnpj_ou_cpf_do_socio').alias('frequencia'))\
    .where('data_de_entrada_sociedade >= 2010')\
    .orderBy('data_de_entrada_sociedade', ascending=True)\
    .show()

O resultado é uma mensgem de erro enorme:

AnalysisException                         Traceback (most recent call last)
<ipython-input-54-33e377fb370c> in <module>
     18          f.avg('faixa_etaria').alias('faixa_etaria_media'),\
     19          f.count('cnpj_ou_cpf_do_socio').alias('frequencia'))\
---> 20     .where('data_de_entrada_sociedade >= 2010')\
     21     .orderBy('data_de_entrada_sociedade', ascending=True)\
     22     .show()

2 frames
/content/spark-3.1.2-bin-hadoop2.7/python/pyspark/sql/utils.py in deco(*a, **kw)
    115                 # Hide where the exception came from that shows a non-Pythonic
    116                 # JVM exception message.
--> 117                 raise converted from None
    118             else:
    119                 raise

#comentário de erro continua abaixo...
2 respostas
solução!

Bom dia Claucio Fernando Donizete dos Santos , tudo bem?

Se ainda continuas com o erro, consegui corrigir o teu código por aqui. O que estava faltando era a extração do ano para a coluna 'ano_de_entrada_sociedade'. O problema era esse mesmo porque no where estava sendo feita uma comparação de uma data com um número inteiro (2010). Segue abaxio o teu código com as correções feitas:

socios = socios.withColumn('faixa_etaria', socios['faixa_etaria'].cast(DoubleType()))

socios\
     .select('cnpj_basico', f.year('data_de_entrada_sociedade').alias('ano'), 'faixa_etaria', 'cnpj_ou_cpf_do_socio')\
     .groupBy('ano')\
     .agg(
         f.avg('faixa_etaria').alias('faixa_etaria_media'),
         f.count('cnpj_ou_cpf_do_socio').alias('frequencia'))\
     .where('ano >= 2010')\
     .orderBy('ano', ascending=True)\
     .show()

Obtendo o seguinte resultado:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Atte, Teddy Ordoñez

Entendi!

Obrigado.