Scala 如何在spark中从dataframe的多列中查找最大值

Scala 如何在spark中从dataframe的多列中查找最大值,scala,apache-spark,Scala,Apache Spark,我已将spark数据框输入为 sample A B C D 1 1 3 5 7 2 6 8 10 9 3 6 7 8 1 我需要在A、B、C、D列中找到最大值,这些列是主题标记。 我需要创建一个新的dataframe,将max_标记作为新列 sample A B C D max_marks 1 1 3 5 7 7 2 6 8 10 9 10 3 6 7 8 1 8 我已经使用scala作为 val df =

我已将spark数据框输入为

sample A B C  D
1      1 3 5  7
2      6 8 10 9
3      6 7 8  1
我需要在A、B、C、D列中找到最大值,这些列是主题标记。 我需要创建一个新的dataframe,将max_标记作为新列

sample A B C  D  max_marks
  1    1 3 5  7   7
  2    6 8 10 9   10
  3    6 7 8  1   8
我已经使用scala作为

val df = df.columns.toSeq
val df1=df.foldLeft(df){(df,colName)=> df.withColumn("max_sub",max((colName)))
df.show()
我收到一条错误消息

main org.apache.spark.sql.AnalysisException:分组表达式序列为空 这个数据帧大约有100列,所以如何在这个数据帧上迭代 在数据帧上迭代是有帮助的,因为必须找出平均值的列大约是100列数据帧中的10列,大约有10000条记录 我希望在不手动给出列名的情况下动态传递列,这意味着在我选择的列上循环并执行任何数学运算


有很多方法可以实现这一点,其中一种方法就是使用map

简单的伪代码来做你想做的事情,它无论如何都不会工作,但我认为这个想法很清楚

df = df.withColumn("max_sub", "A")
df.map({x=> {
    max = "A"
    maxVal = 0
    for col in x{
        if(col != "max_sub" && x.col > maxVal){
            max = col
            maxVal = x.col 
        }
    }
    x.max_sub = max
    x
})

感谢您的回复,但是除了使用for循环还有其他方法吗。