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.

El orden de las columnas en Apache Zeppelin al seleccionar los datos de la tabla temporal está incorrecto, ¿cómo colocar una columna específica primero?

Actualmente tenemos la salida del scala DataFrame con el valor de id mostrado primero (pero se agrega cronológicamente al DataFrame en último lugar). Otras columnas aparecen dinámicamente en función de la función .pivot() y los datos.

Cuando solicito los datos en el intérprete %sql, el orden cambia, lo que hace que el archivo CSV que descargo también tenga la columna id al final, lo cual no me sirve. No puedo simplemente escribir el script de selección de una vez poniendo la columna id como primer punto manualmente, ya que no puedo controlar las otras columnas debido a la operación pivot. ¿Existe alguna otra forma de colocar una columna específica al principio?

El párrafo en Scala es:

resultMean.registerTempTable("mean")  

El párrafo en SQL es:

%sql
select *
from mean
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para asegurar que la columna de id aparezca primero tanto en el intérprete %sql como en el archivo CSV, es seleccionar explícitamente el orden de las columnas en tu consulta SQL. Puedes usar la sentencia SELECT y listar todas las columnas que deseas incluir en tu resultado, en el orden en que deseas que aparezcan. Por ejemplo:

    %sql
    SELECT id, col1, col2, col3
    FROM mean
    

    En esta consulta, estamos seleccionando la columna id primero, seguida por col1, col2 y col3, en ese orden. Esto debería asegurar que la columna de id aparezca primero en el resultado, sin importar el orden en que se agregaron las columnas al DataFrame.

    Si tienes muchas columnas en tu DataFrame y no quieres especificar manualmente el orden en tu consulta SQL, puedes crear un nuevo DataFrame que solo incluya las columnas que necesitas en el orden deseado, y luego registrar ese DataFrame como una tabla temporal en su lugar. Por ejemplo:

    val selectedCols = Seq("id", "col1", "col2", "col3")
    val resultMeanSelected = resultMean.select(selectedCols.head, selectedCols.tail:_*)
    resultMeanSelected.registerTempTable("meanSelected")
    

    En este código, estamos creando un nuevo DataFrame llamado resultMeanSelected que solo incluye las columnas "id", "col1", "col2" y "col3", en ese orden. Luego registramos este nuevo DataFrame como una tabla temporal llamada "meanSelected". De esta manera, cuando consultamos la tabla temporal %sql select * from meanSelected, solo se incluirán estas columnas, en el orden deseado.

    Cualquiera de estos métodos debería permitirte controlar el orden de las columnas en tu resultado, incluso al usar funciones de pivoteo dinámico como .pivot().

Comments are closed.