Si encuentras algo que te causa duda puedes dejarlo en la sección de comentarios y haremos todo lo posible de ayudarte lo más rápido posible.
Solución:
Puede obtener los nombres de las columnas, reordenarlos como desee y luego usar select
en el DataFrame original para obtener uno nuevo con este nuevo orden:
val columns: Array[String] = dataFrame.columns
val reorderedColumnNames: Array[String] = ??? // do the reordering you want
val result: DataFrame = dataFrame.select(reorderedColumnNames.head, reorderedColumnNames.tail: _*)
La biblioteca Spark-Daria tiene una reorderColumns
método que facilita el reordenamiento de las columnas en un DataFrame.
import com.github.mrpowers.spark.daria.sql.DataFrameExt._
val actualDF = sourceDF.reorderColumns(
Seq("field1", "field3", "field2")
)
El reorderColumns
El método utiliza la solución de @Rockie Yang bajo el capó.
Si desea obtener el orden de las columnas de df1
para igualar el orden de la columna de df2
, algo como esto debería funcionar mejor que codificar todas las columnas:
df1.reorderColumns(df2.columns)
La biblioteca spark-daria también define un sortColumns
transformación para ordenar columnas en orden ascendente o descendente (si no desea especificar todas las columnas en una secuencia).
import com.github.mrpowers.spark.daria.sql.transformations._
df.transform(sortColumns("asc"))
Como han comentado otros, tengo curiosidad por saber por qué haría esto, ya que el orden no es relevante cuando puede consultar las columnas por sus nombres.
De todos modos, usar una selección debería dar la sensación de que las columnas se han movido en la descripción del esquema:
val data = Seq(
("a", "hello", 1),
("b", "spark", 2)
)
.toDF("field1", "field2", "field3")
data
.show()
data
.select("field3", "field2", "field1")
.show()
Sección de Reseñas y Valoraciones
Recuerda que tienes la capacidad de añadir una valoración certera si te fue de ayuda.