Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Acessar valores de campo struct no Spark

Olá boa tarde Como acessar os valores dos campos "product_name", "product_ID" e "product_category" do tipo struct (array aninhados) sem a utilizar o comando "explode" como opção?


root
 |-- Product: struct (nullable = true)
 |    |-- Product_name: string (nullable = true)
 |    |-- Product_ID: long (nullable = true)
 |    |-- Product_category: string (nullable = true)
 |-- Rating: float (nullable = true)
 |-- Price: integer (nullable = true)

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, IntegerType, LongType, StringType, FloatType, ArrayType


input_data = [(("Refrigerator", 112345, "Eletronico"), 4.0, 12499),
                  (("LED TV", 114567, "Eletronico"), 4.2, 49999),
                  (("Washing Machine", 113465, "Eletronico"), 3.9, 69999),
                  (("T-shirt", 124378, "Vestuario"), 4.1, 1999),
                  (("Jeans", 126754, "Vestuario"), 3.7, 3999),
                  (("Running Shoes", 134565, "Vestuario"), 4.7, 1499),
                  (("Face Mask", 145234, "Outros"), 4.6, 999)]

schm = StructType([
        StructField('Product', StructType([
            StructField('Product_name', StringType(), True),
            StructField('Product_ID', LongType(), True),
            StructField('Product_category', StringType(), True),            
        ])),

        StructField('Rating', FloatType(), True),
        StructField('Price', IntegerType(), True)])

df = spark.createDataFrame(data=input_data, schema = schm)


df.printSchema()
df.show(truncate=False)

Obrigada

1 resposta
solução!

Olá Estudante, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Para acessar os valores dos campos Product_name, Product_ID e Product_category do tipo struct sem usar o comando explode, uma opção é usar a notação de ponto para acessar os campos diretamente através do select. Por exemplo:

df.select("Product.Product_name", "Product.Product_ID", "Product.Product_category", "Rating", "Price").show()

Resultado:

Imagem que mostra o resultado, onde a struct está dividida em colunas para cada categoria

Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes podem ser necessários a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado.

Abraços e bons estudos!

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