如何在Spark中从数据框中的多个列中查找最大值

时间:2019-03-05 11:16:16

标签: 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列中找到最大值。 我需要使用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()

我收到一条错误消息

  

“主要” org.apache.spark.sql.AnalysisException:分组表达式序列为空   该数据框大约有100列,因此如何在此数据框上进行迭代   迭代数据框将很有帮助,因为必须找出均值的列大约是100个列数据框中的10个,大约有10000条记录   我希望动态传递列而不手动给出列名称,这意味着要遍历我选择的列并执行任何数学运算

1 个答案:

答案 0 :(得分:-1)

有很多方法可以实现这一目标,其中之一就是使用地图。

简单的伪代码可以执行您想要的操作(无论如何它都不会起作用,但我认为思路很明确)

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
})