1
resposta

Ao rodar qualquer um dos scripts , seja

# Importando as bibliotecas necessárias para utilizar o ETL Jobs do Glue com PySpark 
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

# Iniciando a sessão
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# Gerando um DynamicFrame a partir de uma tabela no Data Catalog
redes_sociais_zoop_dyf = glueContext.create_dynamic_frame.from_catalog(database='db-glue-zoop', table_name='zoop-glue-redes_sociais_zoop_bronze_parquet')

# Convertendo o DynamicFrame em um DataFrame Spark
redes_sociais_zoop_df = redes_sociais_zoop_dyf.toDF()

### Tratando os textos da coluna Comentario e geração da coluna Avaliacao

# Importando a função sql do PySpark regexp_replace para troca de expressões e regexp_extract para extração de textos
from pyspark.sql.functions import regexp_extract, regexp_replace

# Extrair a nota da avaliação e salvar na coluna 'Avaliacao'
redes_sociais_zoop_df = redes_sociais_zoop_df.withColumn("Avaliacao", regexp_extract("Comentario", r"Nota (\d)", 1))

# Remover o texto "Nota valor" do comentário original
redes_sociais_zoop_df = redes_sociais_zoop_df.withColumn("Comentario", regexp_replace("Comentario", r" Nota \d", ""))

### Convertendo o DataFrame Spark em DynamicFrame e mapeando os tipos dos dados

# Importando a função que gera um DynamicFrame
from awsglue.dynamicframe import DynamicFrame

# Converter o DataFrame Spark em DynamicFrame
redes_sociais_zoop_dyf = DynamicFrame.fromDF(redes_sociais_zoop_df, glueContext, "glue_etl")

# Mapeando as colunas do DynamicFrame
redes_sociais_zoop_dyf_mapeado = redes_sociais_zoop_dyf.apply_mapping(
    mappings=[
        ("ID_social", "long", "id_estoque", "long"),
        ("Data", "string", "data", "date"),
        ("Influencia_autor", "long", "influencia_autor", "int"),
        ("Plataforma", "string", "plataforma", "string"),
        ("Nome_produto", "string", "produto", "string"),
        ("Categoria_produto", "string", "categoria_produto", "string"),
        ("Avaliacao", "string", "avaliacao", "int"),
        ("Comentario", "string", "comentario", "string")        
    ]
)

# Configurando o glueContext sink para escrever nova tabela
s3output = glueContext.getSink(
  path="s3://dados-zoop-ea-6#######6/silver/redes-sociais/",   # adicione o nome do seu bucket no path
  connection_type="s3",
  updateBehavior="UPDATE_IN_DATABASE",
  partitionKeys=[],
  compression="snappy",
  enableUpdateCatalog=True,
  transformation_ctx="s3output",
)

# Escrevendo a tabela no Glue Data Catalog
s3output.setCatalogInfo(
  catalogDatabase="db-glue-zoop", catalogTableName="zoop-glue-redes_sociais_zoop_silver"
)
s3output.setFormat("glueparquet")
s3output.writeFrame(redes_sociais_zoop_dyf_mapeado)

job.commit()


**Error Category: RESOURCE_NOT_FOUND_ERROR; An error occurred while calling o147.getCatalogSource. Entity Not Found (Service: Glue, Status Code: 400, Request ID: 30abeb88-d619-4faa-bbf4-ff649072e1fe)**

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Marina! Como vai?

O erro RESOURCE_NOT_FOUND_ERROR indica que o Glue não encontrou a tabela ou o banco de dados informados no trecho onde você usa from_catalog. No seu caso, o problema está provavelmente nos nomes usados aqui:

redes_sociais_zoop_dyf = glueContext.create_dynamic_frame.from_catalog(
    database='db-glue-zoop',
    table_name='zoop-glue-redes_sociais_zoop_bronze_parquet'
)

Para resolver, peço que faça as seguintes verificações:

  1. Verifique no Glue Data Catalog se o nome do banco e da tabela estão exatamente iguais aos que aparecem lá.

    • Os nomes devem ser idênticos, respeitando letras minúsculas, hífens ou underscores.

    • Por exemplo, se o banco no catálogo estiver como db_glue_zoop (com underscore), é preciso ajustar no código:

      database='db_glue_zoop'
      

      E o mesmo vale para o nome da tabela:

      table_name='zoop_glue_redes_sociais_zoop_bronze_parquet'
      
  2. Confirme se a tabela está no catálogo.

    • Vá em Glue → Data Catalog → Tables e veja se ela aparece listada.

Depois de ajustar os nomes e confirmar o catálogo, rode novamente o Job e veja se a execução é concluída com sucesso.

Espero ter ajudado.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

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