1
resposta

[Dúvida] Erro: AttributeError: 'NoneType' object has no attribute '_jdf' e TypeError(

Olá bom dia.

Gostaria de atualizar o tópico. O modelo que gostaria de treinar tem como resultado uma coluna com percentual e quando rodo o comando. Essa coluna se chama Oc e a renomeei para label.

dados_prep = assembler.transform(dados).select('features', 'label'), recebo os seguintes erros:

TypeError("Params must be a param map but got %s." % type(params))

e depois

Erro: AttributeError: 'NoneType' object has no attribute '_jdf'

Imagino que seja algo relacionado a coluna onde tenho um número seguido do símbolo de porcentagem.

Podem me ajudar, por favor?

Obrigado


Olá, boa noite.

Tentei reproduzir os passos do curso, porém agora ao exercitar com outros dados, encontro problemas na vetorização e só recebo uma mensagem de erro ao final.

dados.printSchema()
root
 |-- Cl: string (nullable = true)
 |-- ID: string (nullable = true)
 |-- SW: string (nullable = true)
 |-- CLTA: string (nullable = true)
 |-- C_Kb: string (nullable = true)
 |-- TS_b: string (nullable = true)
 |-- TE_b: string (nullable = true)
 |-- P_Kb: string (nullable = true)
 |-- A_Kb: string (nullable = true)
 |-- Oc: string (nullable = true)

Como tenho interesse nas colunas númericas, mudei as colunas C,TS, TE, P, A e Oc para double e mantive as demais como string. Aí começam os problemas

Usei:

from pyspark.ml.feature import VectorAssembler
dados= dados.withColumnRenamed(' Ocupação','label')

Criei as features

x = ['C_Kb',
    'TS_b',
    'TE_b',
    'P_Kbp',
    'A_Kb',
    'label']

Rodei:

assembler = VectorAssembler(inputCols = x, outputCol = 'features'),

Mas no comando abaixo recebo a msg de erro:

dados_prep = assembler.transform(dados).select('features', 'label')

IllegalArgumentException: Data type string of column C_Kb is not supported.
Data type string of column TS_bis not supported.
Data type string of column TE_b is not supported.
Data type string of column P_Kbp is not supported.
Data type string of column A_Kb is not supported.

Achei estranho, pois eu já tinha feito mudança no tipo.

Quando repito o procedimento de mudar o tipo, eu vejo que está correto, porém ao rodar novamente

dados_prep = assembler.transform(dados).select('features', 'label'), recebo o erro:

AttributeError: 'NoneType' object has no attribute '_jdf'

Quando executo dados.show( ), também recebo o seguinte erro:

AttributeError: 'NoneType' object has no attribute 'show'

Não consigo avançar no código por conta disso. Podem me ajudar, por favor? Obrigado Luciano

1 resposta

Oi, Luciano, tudo bem?

Desculpe a demora em te responder!

O erro TypeError está ocorrendo porque você está passando um objeto VectorAssembler com uma vírgula após ele, o que cria uma tupla em vez de um objeto. Para corrigir isso, você deve remover a vírgula após VectorAssembler. O mesmo se aplica ao erro AttributeError que ocorre mais tarde. Certifique-se de que você está criando o objeto VectorAssembler corretamente:

assembler = VectorAssembler(inputCols=x, outputCol='features')
dados_prep = assembler.transform(dados).select('features', 'label')

O erro IllegalArgumentException ocorre porque as colunas que você está tentando passar para oVectorAssembler continuam sendo tratadas como strings. Mesmo que você tenha alterado os tipos de dados usando dados.withColumnRenamed(), isso apenas altera os nomes das colunas, não os tipos de dados subjacentes. Para corrigir isso, você deve converter explicitamente as colunas para o tipo double. Você pode usar a função cast para fazer isso:

from pyspark.sql.functions import col

for col_name in x:
    dados = dados.withColumn(col_name, col(col_name).cast('double'))

Em seguida, você pode criar o VectorAssembler e transformar os dados:

assembler = VectorAssembler(inputCols=x, outputCol='features')
dados_prep = assembler.transform(dados).select('features', 'label')

O erro AttributeError ao executar dados.show() pode estar relacionado a problemas anteriores. Certifique-se de que você executou os passos acima para converter as colunas para o tipo double antes de tentar mostrar os dados.

Espero ter ajudado. Caso tenha dúvidas, não hesite em postar no fórum!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!