Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

745
Vistas
¿Cómo pasar el esquema para crear un nuevo marco de datos a partir de un marco de datos existente?

Para pasar el esquema a un archivo json hacemos esto:

 from pyspark.sql.types import (StructField, StringType, StructType, IntegerType) data_schema = [StructField('age', IntegerType(), True), StructField('name', StringType(), True)] final_struc = StructType(fields = data_schema) df =spark.read.json('people.json', schema=final_struc)

El código anterior funciona como se esperaba. Sin embargo, ahora tengo datos en la tabla que muestro por:

 df = sqlContext.sql("SELECT * FROM people_json")

Pero si trato de pasarle un nuevo esquema usando el siguiente comando, no funciona.

 df2 = spark.sql("SELECT * FROM people_json", schema=final_struc)

Da el siguiente error:

sql() obtuvo un argumento de palabra clave inesperado 'esquema'

NOTA: estoy usando Databrics Community Edition

  • ¿Qué me estoy perdiendo?
  • ¿Cómo paso el nuevo esquema si tengo datos en la tabla en lugar de algún archivo JSON?
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No puede aplicar un nuevo esquema a un marco de datos ya creado. Sin embargo, puede cambiar el esquema de cada columna convirtiendo a otro tipo de datos como se muestra a continuación.

 df.withColumn("column_name", $"column_name".cast("new_datatype"))

Si necesita aplicar un nuevo esquema, debe convertir a RDD y crear un nuevo marco de datos nuevamente como se muestra a continuación

 df = sqlContext.sql("SELECT * FROM people_json") val newDF = spark.createDataFrame(df.rdd, schema=schema)

¡Espero que esto ayude!

over 4 years ago · Santiago Trujillo Denunciar

0

Ya hay una respuesta disponible, pero aún quiero agregar algo.

  1. Crear DF desde RDD
  • usando toDF

    newDf = rdd.toDF(schema, column_name_list)

  • usando createDataFrame

    newDF = spark.createDataFrame(rdd ,schema, [list_of_column_name])

  1. Crear DF desde otro DF

supongamos que tengo DataFrame con columnas|tipo de datos - nombre|cadena, marcas|cadena, género|cadena.

si quiero obtener solo marcas como enteros.

 newDF = oldDF.select("marks") newDF_with_int = newDF.withColumn("marks", df['marks'].cast('Integer'))

Esto convertirá las marcas en enteros.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda