2017-02-12 7 views
1

私は次のように/ 60選択時の+分とデータフレームから他の列で新しいデータフレームを作成しようとしました:データフレームのエラー:「オーバーロードされたメソッドの値の選択肢を選択し、」

val logon11 = logon1.select("User","PC","Year","Month","Day","Hour","Minute",$"Hour"+$"Minute"/60) 

私は下のエラーを得ました:

<console>:38: error: overloaded method value select with alternatives: 
    (col: String,cols: String*)org.apache.spark.sql.DataFrame <and> 
    (cols: org.apache.spark.sql.Column*)org.apache.spark.sql.DataFrame 
cannot be applied to (String, String, String, String, String, String, String,org.apache.spark.sql.Colum) 

... 

多分、私はこの種のデータフレームを「選択」を使って同時に取得することができないということを知っていました。それでは、どうすればそのようなデータフレームを手に入れられますか?

答えて

1

あなたは、既存の列から新しい列を作成したり、

val logon1 = Seq(("User1","PC1",2017,2,12,12,10)).toDF("User","PC","Year","Month","Day","Hour","Minute") 
val logon11 = logon1.withColumn("new_col", $"Hour"+$"Minute"/60) 
logon11.printSchema() 
logon11.show 

出力以下のようないくつかの条件に基づいてwithColumnを使用することができます。

root 
|-- User: string (nullable = true) 
|-- PC: string (nullable = true) 
|-- Year: integer (nullable = false) 
|-- Month: integer (nullable = false) 
|-- Day: integer (nullable = false) 
|-- Hour: integer (nullable = false) 
|-- Minute: integer (nullable = false) 
|-- new_col: double (nullable = true) 


+-----+---+----+-----+---+----+------+------------------+ 
| User| PC|Year|Month|Day|Hour|Minute|   new_col| 
+-----+---+----+-----+---+----+------+------------------+ 
|User1|PC1|2017| 2| 12| 12| 10|12.166666666666666| 
+-----+---+----+-----+---+----+------+------------------+ 
+0

あなたの方法によると、私はそのDFを得ました。ありがとうございました。 –

+0

がそれを手に入れました。ありがとうございました。 –

5

DFのselectメソッドは、すべてStringまたはすべてorg.apache.spark.sql.Columnのいずれかの引数を取りますが、両方を混在させません。

StringColumnの両方の型パラメータをselectメソッドに渡しています。

val logon11 = logon1.select($"User",$"PC",$"Year",$"Month",$"Day",$"Hour",$"Minute",$"Hour"+$"Minute"/60 as "total_hours") 

希望します。

+0

はそれを解決!ありがとうございました! –

関連する問題