Isso para mim resolveu ate o proximo treinamento de PCA:
from pyspark.sql.functions import col
from pyspark.ml.feature import StringIndexer, OneHotEncoder, VectorAssembler
from pyspark.ml import Pipeline
# Lista das colunas a serem processadas
colunas = ['valence', 'year', 'acousticness', 'explicit', 'instrumentalness', 'key',
'liveness', 'loudness', 'mode', 'popularity', 'speechiness', 'tempo']
# Identificar colunas numéricas e categóricas
colunas_numericas = ['valence', 'year', 'acousticness', 'instrumentalness', 'liveness',
'loudness', 'popularity', 'speechiness', 'tempo']
colunas_categoricas = ['explicit', 'key', 'mode']
# Converter colunas numéricas de string para double
for coluna in colunas_numericas:
df_data = df_data.withColumn(coluna, col(coluna).cast('double'))
# Inicializar lista de estágios para o Pipeline
stages = []
# Indexar e codificar colunas categóricas
for coluna in colunas_categoricas:
indexador = StringIndexer(inputCol=coluna, outputCol=coluna + '_index')
codificador = OneHotEncoder(inputCol=coluna + '_index', outputCol=coluna + '_vec')
stages += [indexador, codificador]
# Definir coluna de features para o VectorAssembler
colunas_features = [col + '_vec' for col in colunas_categoricas] + colunas_numericas
# Inicializar o VectorAssembler
assembler = VectorAssembler(inputCols=colunas_features, outputCol='features')
stages += [assembler]
# Construir e ajustar o Pipeline
pipeline = Pipeline(stages=stages)
df_data = pipeline.fit(df_data).transform(df_data)
# Exibir o DataFrame resultante
df_data.show()
Ai no treinamento do PCA, acontece o seguinte erro:
pca = PCA(k=K, inputCol='features_scaled', outputCol='pca_features')
model_pca = pca.fit(dados_musicas_scaler)
dados_musicas_pca = model_pca.transform(dados_musicas_scaler)
IllegalArgumentException: requirement failed: source vector size 3 must be no less than k=12
Consegue ajudar?