首页 > 解决方案 > 如何从火花数据框中的多列中找到最大值

问题描述

我输入火花数据框为

sample A B C  D
1      1 3 5  7
2      6 8 10 9
3      6 7 8  1

我需要在作为主题标记的 A、B、C、D 列中找到最大值。我需要创建一个以 max_marks 作为新列的新数据框。

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 条记录我希望动态传递列而不手动提供列名,这意味着循环我选择的列并执行任何数学运算

标签: scalaapache-spark

解决方案


有很多方法可以实现这一点,其中一种方法是使用 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
})

推荐阅读