2017-09-26 12 views
2

データフレームに「合計」行を作成します。1つではなく列全体で合計を計算する方法は?

これは、uidセル以外のすべての行を追加します。

uid val1 val2 val3 
3213 1 2 3 

は、これを作成するには:

uid val1 val2 val3 Total 
3213 1 2 3  6 

だから、私はUID、そして合計をフィルタリングする必要があります。ただし、集計前にUIDを削除すると、集計後に表に再結合できなくなります(結合はUIDになければならないため)。

フィルタで再生していましたが、フィルタで列名を取得する方法が見つかりませんでした。

それでは、私がこれまで持っていることは次のとおりです。

val dfvReducedTotalled = dfvReduced.withColumn("TOTAL", dfvReduced.columns 
    .filter(col=> !col.?????? == "UID") 
    .map(c => col(c)).reduce((c1, c2) => c1 + c2)) 

答えて

3

あなたは、まずuidていない列名を収集reduceを使用してsum式を作成し、その後Total列を作成することができます

val row_sum_expr = df.columns.collect{ case x if x != "uid" => col(x) }.reduce(_ + _) 
df.withColumn("Total", row_sum_expr).show 
+----+----+----+----+-----+ 
| uid|val1|val2|val3|Total| 
+----+----+----+----+-----+ 
|3213| 1| 2| 3| 6| 
+----+----+----+----+-----+ 
関連する問題