2016-09-08 6 views
1

列名の配列を入力として使用してSparkデータフレームを集約し、同時に列の元の名前を保持したいとします。名前を保持している列名の配列を使用してSparkデータフレームを集約します。

df.groupBy($"id").sum(colNames:_*) 

これは機能しますが、名前を保持できません。それは、これは、アレイ全体のために起こることができますどのように

df.groupBy($"id").agg(sum(colNames(2)).alias(colNames(2))) 

のような単一の要素を取るために働く

df.groupBy($"id").agg(sum(colNames:_*).alias(colNames:_*)) 
error: no `: _*' annotation allowed here 

:?その答えに触発され、私はunsucessfullyこれを試してみましたhereを見つけましたか

答えて

3

だけの別名で列の順序を提供します。

val colNames: Seq[String] = ??? 
val exprs = colNames.map(c => sum(c).alias(c)) 
df.groupBy($"id").agg(exprs.head, exprs.tail: _*) 
+0

をはい、私はそれがこのようなものになるだろうと推測。しかし、まだそれを動作させることはできません。エラー:いいえ ':_ * '注釈はここで許可されました (注釈は* -parametersの引数でのみ使用できます) – johnblund

+0

申し訳ありませんが、合計ではありません。 – zero323

+0

ええ、私もcolNamesがexprsであるべきであることを理解しました。 – johnblund

関連する問題