Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

750
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!