1

データフレーム "df"と列 "colStr"のリストが与えられている場合、データフレームからこれらの列を抽出または参照する方法があります。ここでスパークデータフレーム内の個々の列への文字列(または文字列のリスト)の分割

は例です -

val in = sc.parallelize(List(0, 1, 2, 3, 4, 5)) 
val df = in.map(x => (x, x+1, x+2)).toDF("c1", "c2", "c3") 
val keyColumn = "c2" // this is either a single column name or a string of column names delimited by ',' 
val keyGroup = keyColumn.split(",").toSeq.map(x => col(x)) 

import org.apache.spark.sql.expressions.Window 
import sqlContext.implicits._ 

val ranker = Window.partitionBy(keyGroup).orderBy($"c2") 

val new_df= df.withColumn("rank", rank.over(ranker)) 

new_df.show() 

上記のエラーが出て

error: overloaded method value partitionBy with alternatives 
(cols:org.apache.spark.sql.Column*)org.apache.spark.sql.expressions.WindowSpec <and> 
(colName: String,colNames: String*)org.apache.spark.sql.expressions.WindowSpec 
cannot be applied to (Seq[org.apache.spark.sql.Column]) 

で助けに感謝します。ありがとう!

答えて

3

あなたはkeyGroupリストの列によるグループのデータフレームにしようとしている場合は、partitionBy関数にパラメータとしてkeyGroup: _*を渡すことができます。

val ranker = Window.partitionBy(keyGroup: _*).orderBy($"c2")  
val new_df= df.withColumn("rank", rank.over(ranker)) 

new_df.show 
+---+---+---+----+ 
| c1| c2| c3|rank| 
+---+---+---+----+ 
| 0| 1| 2| 1| 
| 5| 6| 7| 1| 
| 2| 3| 4| 1| 
| 4| 5| 6| 1| 
| 3| 4| 5| 1| 
| 1| 2| 3| 1| 
+---+---+---+----+ 
+0

不思議downvoteが、あまりにも私には正しい答えのように見える理由。 –

+0

@PascalSoucy私はどちらも知らない。特に、ダウン有権者がこの場合にコメントを残していないならば。私はなぜそれが間違っているのか分からないので、そのまま残しておきます。コメントをありがとう。 – Psidom

関連する問題