2016-06-28 6 views
3

2つのデータフレームを結合した後、私は列の順序が変わったと思います。Spark Dataframes:Java/Scalaの列の順序を変更するにはどうすればよいですか?

例:[b,c,d,e]および[a,b]bにある2つのデータフレームを結合すると、[b,a,c,d,e]という列の順序が得られます。

列の順序を変更するにはどうすればよいですか(たとえば、[a,b,c,d,e])? 私はPython/Rでそれを行う方法を見つけましたが、ScalaやJavaではできません。データフレーム列のスワッピングまたは並べ替えを可能にするメソッドはありますか?あなたの参加後に並べ替えされ、それを行うための

+0

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

答えて

2

一つの方法:

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

:あなたはselect()方法を実施し、「スプラット」をすることができます1つまたは2つのスワップよりも、他にどんな方法がありますか?私の推測は 'columns()'(Java API)と関係がある... –

4

スカラ座では、DataFrame.select()方法に列の可変長リストを渡すこと"splat":_*)構文を使用することができます。

あなたの例に対処するには、文字列の配列を返すDataFrame.columnsで既存の列のリストを取得できます。次に、その配列をソートして値を列に変換します。データフレームは、列のその数に扱いにくくなり、注文が多いたら

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:_*) 
関連する問題