Spark Dataframes: как изменить порядок столбцов в Java/Scala?

После объединения двух кадров данных я обнаружил, что порядок столбцов изменился так, как я предполагал.

Пример: объединение двух фреймов данных со столбцами [b,c,d,e] и [a,b] в b дает порядок столбцов [b,a,c,d,e].

Как изменить порядок столбцов (например, [a,b,c,d,e])? Я нашел способы сделать это в Python/R, но не в Scala или Java. Существуют ли какие-либо методы, позволяющие менять местами или переупорядочивать столбцы фрейма данных?


person jest jest    schedule 28.06.2016    source источник
comment
stackoverflow.com/help/how-to-ask   -  person Michael Benjamin    schedule 28.06.2016


Ответы (2)


В Scala вы можете использовать "знак" (:_*) синтаксис для передачи списка столбцов переменной длины в метод DataFrame.select().

Чтобы обратиться к вашему примеру, вы можете получить список существующих столбцов через DataFrame.columns, который возвращает массив строк. Затем просто отсортируйте этот массив и преобразуйте значения в столбцы. Затем вы можете «выплеснуть» метод select():

val mySortedCols = myDF.columns.sorted.map(str => col(str))
// Array[String]=(b,a,c,d,e) => Array[Column]=(a,b,c,d,e)

val myNewDF = myDF.select(mySortedCols:_*)
person chucknelson    schedule 07.09.2016
comment
Что было бы эквивалентно в Java? - person Dror; 21.02.2019

Один из способов сделать это - переупорядочить после вашего присоединения:

case class Person(name : String, age: Int)
val persons = Seq(Person("test", 10)).toDF

persons.show
+----+---+
|name|age|
+----+---+
|test| 10|
+----+---+

persons.select("age", "name").show

+---+----+
|age|name|
+---+----+
| 10|test|
+---+----+
person Kestemont Max    schedule 28.06.2016
comment
Как только фрейм данных становится громоздким по количеству столбцов, а порядок превышает одну или две перестановки, какие еще существуют способы? Я предполагаю, что это как-то связано с columns() (Java API)... - person jest jest; 29.06.2016