我有以下DataFrame:

January | February | March
-----------------------------
  10    |    10    |  10
  20    |    20    |  20
  50    |    50    |  50

我正在尝试为此添加一列,这是每一行的值的总和。
January | February | March  | TOTAL
----------------------------------
  10    |    10    |   10   |  30
  20    |    20    |   20   |  60
  50    |    50    |   50   |  150

据我所知,所有内置的聚合函数似乎都是用于计算单列中的值。如何在每行的基础上跨列使用值(使用Scala)?

我已经到了
val newDf: DataFrame = df.select(colsToSum.map(col):_*).foreach ...

最佳答案

您与此非常接近:

val newDf: DataFrame = df.select(colsToSum.map(col):_*).foreach ...

相反,请尝试以下操作:
val newDf = df.select(colsToSum.map(col).reduce((c1, c2) => c1 + c2) as "sum")

我认为这是最好的答案,因为它与使用硬编码的SQL查询的答案一样快,并且与使用UDF的答案一样方便。这是两全其美的做法-我什至没有添加完整的代码行!

关于scala - Spark-行值之和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36360540/

10-15 19:09