spark

2017-05-29 5 views
2

df.groupBy("col1", "col2", "col3")のグループ[String]またはSeq [String]をgroupByに渡すと完全に正常に動作します。spark

しかし、私は次の操作を実行しよう:

val dimensions = Seq("col1", "col2", "col3") 
df.groupBy(dimensions) 

私はこのエラーを取得しています:あなたは解凍しなければならないので、引数リストが可変引数を示した後

<console>:38: error: overloaded method value groupBy with alternatives: 
    (col1: String,cols: String*)org.apache.spark.sql.GroupedData <and> 
    (cols: org.apache.spark.sql.Column*)org.apache.spark.sql.GroupedData 
cannot be applied to (Seq[String]) 

答えて

5

*をシーケンス。あなたのような署名として持っている場合:_*構文を使用して、あなたはシーケンスを持っている場合は

foo() 
foo(t1) 
foo(t2) 
... 

は、あなたがそれを渡すことができます:

def foo(ts: T*) = ??? 

それはタイプTの任意の数の引数で呼び出すことができます

val ts: Seq[T] = ??? 
foo(ts: _*) 

詳細については、Scala言語仕様のRepeated Parameters sectionを参照してください。あなたはどちらかのことができ、この場合はそう

(cols: org.apache.spark.sql.Column*)

+1

に最後のオプション 'df.groupBy(寸法マップCOLに一致するように(col1: String,cols: String*)、または

df.groupBy(dimensions map col: _*) 

に一致するように

df.groupBy(dimensions.head, dimensions.tail: _*) 

:_ *) 'はとても役に立ちます - ありがとう!私はすでに「頭」と「テイル」のトリックを数回見ましたが、これは私にとって初めてのものです。 – MaxU

関連する問題