es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AnálisisException: La referencia ‘title’ es ambigua, podría ser: title, title.

Estoy usando la versión 3.0 de Glue, la versión 3 de Python y la versión 3.1 de Spark.
Estoy extrayendo datos de un archivo XML para crear un dataframe y escribiendo los datos en un camino de S3 en formato CSV.
Antes de escribir el dataframe, imprimí el esquema y 1 registro del dataframe usando show(1). Hasta este punto, todo estaba bien.
Pero al escribirlo en un archivo CSV en la ubicación de S3, obtuve el error “columna duplicada encontrada” ya que mi dataframe tenía 2 columnas llamadas “Title” y “title”.
Intenté agregar una nueva columna llamada “title2” que tendría el contenido de “title” y pensé en eliminar “title” más tarde con el siguiente comando:

from pyspark.sql import functions as f
df = df.withColumn("title2", f.expr("title"))

Pero obtuve un error: “Referencia ‘title’ es ambigua, podría ser: title, title”.
Intenté:
df = df.withColumn("title2", f.col("title"))
y obtuve el mismo error.
¿Alguna ayuda o enfoque para resolver esto, por favor…

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con la columna duplicada ‘Title’ y ‘title’ se puede resolver cambiando el nombre de la columna ‘title’ a ‘Title’ usando el método withColumnRenamed. Esto asegurará que ambas columnas tengan nombres únicos y no habrá ningún error al escribir el dataframe en formato CSV.

    Aquí está el código para cambiar el nombre de la columna:

    df = df.withColumnRenamed('title', 'Title')
    

    Después de cambiar el nombre de la columna, puedes agregar una nueva columna ‘title2’ usando el método withColumn de la siguiente manera:

    df = df.withColumn('title2', f.col('Title'))
    

    Esto creará una nueva columna ‘title2’ con el mismo contenido que ‘Title’. Finalmente, puedes eliminar la columna ‘Title’ usando el método drop de la siguiente manera:

    df = df.drop('Title')
    

    Ahora, el dataframe tendrá solo dos columnas: ‘title’ y ‘title2’ con nombres únicos y podrás escribir este dataframe en la ruta de S3 en formato CSV sin ningún error.

Comments are closed.