2016-06-28 2 views
3

Nachdem ich zwei Datenrahmen verbunden habe, finde ich, dass die Spaltenreihenfolge geändert hat, was ich vermutete.Spark Datarefames: Wie kann ich die Reihenfolge der Spalten in Java/Scala ändern?

Ex: Anschließen von zwei Datenrahmen mit Säulen [b,c,d,e] und [a,b] auf b ergibt eine Spaltenanordnung von [b,a,c,d,e].

Wie kann ich die Reihenfolge der Spalten ändern (z. B. [a,b,c,d,e])? Ich habe Wege gefunden, es in Python/R aber nicht Scala oder Java zu tun. Gibt es Methoden, die das Umlagern oder Umordnen von Dataframe-Spalten ermöglichen?

+0

http://stackoverflow.com/help/how-to-ask –

Antwort

2

Eine Möglichkeit, es zu tun ist Nachbestellung nach dem anschließen:

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| 
+---+----+ 
+0

Sobald ein Datenrahmen in seiner Anzahl der Spalten unhandlich wird und der Auftrag mehr als ein oder zwei Swaps, welche anderen Wege gibt es? Meine Vermutung hat etwas mit 'columns()' (Java API) zu tun ... –

4

In Scala Sie die "splat" (:_*) Syntax verwenden können eine variable Länge Liste der Spalten an die DataFrame.select() Methode zu übergeben.

Um zu Ihrem Beispiel zu gelangen, können Sie eine Liste der vorhandenen Spalten über DataFrame.columns abrufen, die ein Array von Strings zurückgibt. Sortieren Sie dann das Array und konvertieren Sie die Werte in Spalten. Sie können dann „Klecks“, um die select() Methode:

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:_*) 
Verwandte Themen